【问题标题】:Creates an object composed of the picked object properties: [duplicate]创建一个由拾取的对象属性组成的对象:[重复]
【发布时间】:2021-11-06 01:20:28
【问题描述】:

我正在尝试从对象和属性列表创建一个对象。

 const pick = (obj, ...fields) => {
  return [...fields] = obj
};

我怎样才能意识到这一点?

【问题讨论】:

  • 可以分享一下这个函数的输入输出示例吗?

标签: javascript object


【解决方案1】:

遍历fields数组并检查属性is available in obj然后放入需要返回的最终对象。

const pick = (obj, ...fields) => {
  const finalObj = { };
  for (field of fields) {
    if (obj[field]) {
      finalObj[field] = obj[field];
    }
  }
  return finalObj;
};

const obj = { name: "test name", age: 25, title: "Mr.", city: "test city" };

console.log(pick(obj, "name", "age", "city", "other"));

【讨论】:

    【解决方案2】:

    试试这样的:

    const pick = (obj, ...fields) => Object.fromEntries(Object.entries(obj).filter(([k]) => fields.includes(k)))
    

    【讨论】:

      【解决方案3】:

      减少字段列表,并从原始对象中获取值:

      const pick = (obj, ...fields) => fields.reduce((acc, field) => ({ ...acc, [field]: obj[field] }), {});
      
      const obj = { a: 1, b: 2, c: 3 };
      
      const result = pick(obj, 'a', 'c');
      
      console.log(result);

      您可以使用in 运算符来忽略原始对象上不存在的属性:

      const pick = (obj, ...fields) => fields.reduce((acc, field) => {
        const value = obj[field];
        
        if(field in obj) acc[field] = value;
      
        return acc;
      }, {});
      
      const obj = { a: 1, b: 2, c: 3 };
      
      const result = pick(obj, 'a', 'c', 'd');
      
      console.log(result);

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2019-07-01
        • 2015-09-08
        • 2013-12-28
        • 2017-05-07
        • 2022-07-20
        • 2014-09-24
        • 2018-07-16
        相关资源
        最近更新 更多