10 个处理 JavaScript 对象的实用技巧

1. 10 个处理 JavaScript 对象的实用技巧!

本文来分享 10 个开发技巧, 可以使用这些技巧来高效地操作和使用 JavaScript 对象。

1.1. 创建一个绝对空的对象

我们可以通过 {} 来创建空对象。 然而, 通过方法中创建的对象, proto、hasOwnProperty 等对象方法仍然是存在的, 这是因为使用 {} 将创建一个继承自 Object 类的对象。

如果需要创建一个绝对空的对象, 最好使用 Object.create(null), 它将创建一个不从任何对象继承且没有属性的对象。

let vehical = Object.create(null);

// vehicle.__proto__ === "undefined"

1.2. 使用扩展运算符组合两个对象

在许多情况下, 需要组合来自不同来源的两个或多个数据集。

最常用的方法是使用 Object.assign()。该方法需要多个参数。 第一个是分配的对象, 其余参数是需要组合的对象。

const name = { id: '1234', name: 'Charuka'};
const university = { id: '1234', university: 'Harvard'};
const PersonalDetails = Object.assign({}, name, university);

console.log(PersonalDetails); 
// { id: '1234', name: 'Charuka', university: 'Harvard' }

使用扩展运算符进行组合更方便, 只需展开任意数量的对象, 并将它们组合成一个对象即可。

const PersonalDetails = { ...name, ...university };

console.log(PersonalDetails); 
// { id: '1234', name: 'Charuka', university: 'Harvard' }

需要注意, 如果存在重复的键, 那后面的会将覆盖前面对象的键。

1.3. 从对象获取键和值的列表

在开发过程中, 有时需要从对象中仅获取键或仅获取值。可以通过以下两个内置函数来实现:

  • Object.keys(): 用于获取键列表。
  • Object.values(): 用于获取值列表。
const vehicle = { brand: 'BWM', year: 2022, type: 'suv'};
//获取键
console.log(Object.keys(vehicle)); // [ 'brand', 'year', 'type' ]
//获取值
console.log(Object.values(vehicle)); // [ 'BWM', 2022, 'suv' ]

1.4. 检查属性

使用 for-in 循环时, 检查对象的属性有助于避免迭代对象原型中的属性。可以使用 Object.hasOwnProperty() 进行检查, 而不是使用 if-else。

const vehicle = { brand: 'BWM', year: 2022, type: 'suv'};
for (var item in vehicle) {  
    if (vehicle.hasOwnProperty(item)) { 
        console.log(item);                 
    };  
};
// brand
// year
// type

1.5. 克隆对象

假设有一个对象并且需要复制它以更改其值, 但原始对象应该保持不变。可以通过以下方法来实现。

第一种方法是使用 Object.assign(), 它将所有可枚举属性的值从一个对象复制到另一个对象。

const initialVehicle = { brand: 'BWM', year: 2022, type: 'suv'};
const secondaryVehicle = Object.assign({}, initialVehicle);
console.log(secondaryVehicle); // { brand: 'BWM', year: 2022, type: 'suv'};

第二种方法是使用 JSON.parse() 复制对象。

var initialVehicle = { brand: 'BWM', year: 2022, type: 'suv'};
var secondaryVehicle = JSON.parse(JSON.stringify(initialVehicle));
console.log(secondaryVehicle); // { brand: 'BWM', year: 2022, type: 'suv'};

1.6. 从对象中选择特定数据

针对对象中的特定键 (key), 可以使用不同的方法进行选择。选择方法的选择取决于希望对这些值进行的操作。下面的示例展示了一种有条理的方式从对象中选择数据, 并可以选择所需的键, 并将它们提取到一个新的对象中。

const selectObj = (obj, items) => { 
  return items.reduce((result, item) => {
    result[item] = obj[item]; 
    return result;
  }, {});
};
const vehicle = { brand: 'BWM', year: 2022, type: 'suv'};
const selected = selectObj(vehicle, ['brand', 'type']);
console.log(selected); // { brand: 'BWM', type: 'suv' }

1.7. 从对象中删除键

有时我们需要从对象中删除特定的键及其值。最合适的方法是编写一个可重用的删除方法, 该方法将一个对象和要删除的键列表作为输入。 然后循环遍历要删除的每个键并将其从对象中删除。

const remove = (object, removeList = []) => {
  const result = { ...object };
  removeList.forEach((item) => {
    delete result[item];
  });
  return result;
}

const vehicle = { brand: 'BWM', year: 2022, type: 'suv'}

const itemRemoved = remove(vehicle, ['year']);
console.log(itemRemoved); // Result { brand: 'BWM', type: 'suv' }

1.8. 将对象数据拉入数组

在某些情况下, 我们需要将对象数据拉入数组中, 例如下拉菜单。可以使用 Object.entries() 函数, 该函数将一个对象作为其第一个参数并返回一个数组。

返回的结果是一个二维数组。内部数组将有两个值: 第一个是键, 第二个是值。

const vehicle = { brand: 'BWM', year: 2022, type: 'suv'}
console.log(Object.entries(vehicle)); 
// [ [ 'brand', 'BWM' ], [ 'year', 2022 ], [ 'type', 'suv' ] ]

1.9. 循环访问 JavaScript 对象

JavaScript 中有多种方法可用于循环访问对象。

第一种方法是使用 Object.entries(), 该函数可以避免查找原始对象中的每个值。

const vehicle = { brand: 'BWM', year: 2022, type: 'suv'}
Object.entries(vehicle).forEach(
    ([key, value]) => console.log(key, value)
);
// brand BWM
// year 2022
// type suv

作为一种更好、更清晰的方法, 可以使用 Object.entries() 进行对象解构。

const vehicle = { brand: 'BWM', year: 2022, type: 'suv'}
for (const [key, value] of Object.entries(vehicle)) {
    console.log(key, value);
}
// brand BWM
// year 2022
// type suv

1.10. 有条件地向对象添加属性

通常, 开发人员使用 if-else 来有条件地向对象添加新元素。 然而, 最简单的方法是使用对象解构和扩展运算符。

const type = { type: 'suv' };
const vehicle = {
  brand: 'BMW',
  year: 2022,
  ...(!type ? {} : type)
}
console.log(vehicle); //{ brand: 'BMW', year: 2022, type: 'suv' }

同样, 使用不同的条件, 可以向对象添加任意数量的元素。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

云满笔记

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值