繁体   English   中英

根据 javascript 中的属性名称数组,创建具有属性子集的 object 的最有效方法是什么?

[英]What is the most efficient way of creating an object with a subset of properties, based on an array of property names in javascript?

在下面的示例中(它满足我的要求),我正在循环 object 的属性,并创建一个新的 object,它仅包含 selectedProperties 数组中的属性。

有没有更有效的方法来做到这一点? 我看过 Object 解构,但我不确定如果你有这样的结果属性数组,这将如何应用。

const bigObject = {
  prop1: "value1",
  prop2: "value2",
  prop3: "value3",
  prop4: "value4"
}

const selectedProperties = ['prop1', 'prop4'];

result = {};
Object.keys(bigObject).forEach((propertyName)=>{
    if(selectedProperties.includes(propertyName)){
        result[propertyName] = bigObject[propertyName];
  }
});

console.log(result);

Output:

{
  prop1: "value1",
  prop4: "value4"
}

不要遍历所有Object.keys然后过滤它们。 只需遍历您想要的属性,然后从 object 中提取它们 - 每个都在O(1)时间内:

const result = selectedProperties.reduce((obj, prop) => {
    obj[prop] = bigObject[prop];
    return obj;
}, {});

只需遍历您选择的属性:

 const bigObject = { prop1: "value1", prop2: "value2", prop3: "value3", prop4: "value4" } const selectedProperties = ['prop1', 'prop4']; let result = {}; selectedProperties.forEach(prop => { result[prop] = bigObject[prop]; }); console.log(result);

或者使用Object.fromEntries()并映射 selectedProperties。

const result = Object.fromEntries(selectedProperties.map(prop => [prop, bigObject[prop]]));

您可以将新部件分配给 object 并在必要时过滤给定的属性。

 const object = { prop1: "value1", prop2: "value2", prop3: "value3", prop4: "value4" }, keys = ['prop0', 'prop1', 'prop4'], result = Object.assign({}, ...keys.filter(Object.prototype.hasOwnProperty, object).map(k => ({ [k]: object[k] })) ); console.log(result);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM