【问题标题】:Finding a value in object by equating from array of object and replacing it with new one from the same collection of array of object通过等同于对象数组并将其替换为来自同一对象数组集合的新值来查找对象中的值
【发布时间】:2020-10-16 21:37:46
【问题描述】:

我有一个对象数组和一个对象对象:

let newSet = [{
    "newName": "New One",
    "oldName": "old one"
  },
  {
    "newName": "New two",
    "oldName": "old two"
  },
  {
    "newName": "New Three",
    "oldName": "old three"
  }
];

let property = {
  companies: [{
    products: [{
        lob: {
          description: "old two"
        }
      },
      {
        lob: {
          description: "old three"
        }
      }
    ]
  }]
};

现在我在这里尝试检查 property 对象是否具有来自 newSet 数组的 oldNamelob's description 值,然后它应该被替换为来自 @ 的相同对象的 newName 987654327@数组

预期输出:

let property = {
  companies: [{
    products: [{
        lob: {
          description: "New two"
        }
      },
      {
        lob: {
          description: "New Three"
        }
      }
    ]
  }]
};

注意:其中可能有多家公司及其多种产品

【问题讨论】:

  • "... 和对象的对象" - companiesproducts 也应该是数组而不是对象
  • @Andreas 哦,是的,感谢他们纠正我并更新它
  • 你也可以分享预期的输出吗?顺便说一句,你试过什么?
  • @gorak 更新为预期结果
  • 只需用旧名称为键,新名称为值的新集合构建一个对象映射,将所有描述替换为对象映射键,值映射

标签: javascript arrays object replace


【解决方案1】:

从 newSet 创建对象映射 {[oldName]: newName}
遍历所有公司和每个公司的产品,在对象映射中找到描述,如果存在则替换为 newName 值。

const map = Object.fromEntries(newSet.map(({oldName,newName})=>[oldName,newName]))
for(const {products} of property.companies)
  for(const {lob} of products)
    if(map[lob.description])
      lob.description = map[lob.description]

console.log(property)
<script>
  let newSet = [{
      "newName": "New One",
      "oldName": "old one"
    },
    {
      "newName": "New two",
      "oldName": "old two"
    },
    {
      "newName": "New Three",
      "oldName": "old three"
    }
  ];

  let property = {
    companies: [{
      products: [{
          lob: {
            description: "old two"
          }
        },
        {
          lob: {
            description: "old three"
          }
        }
      ]
    }]
  };
</script>

【讨论】:

  • 我最终遇到了一个 linting 错误,说:Assignment to property of function parameter,当然这样做在 JS 中是一件坏事,我还能分配这个吗?
  • 你应该查一下这到底是什么意思。遵守你的风格指南是你需要理解的。这是一个微不足道的变化。该 eslint 规则的安全指南的意图显然不适用于代码正在执行的操作。如果您需要不变性,那么您也需要考虑这一点。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-01-10
  • 2019-03-05
  • 2021-04-09
  • 2020-09-01
  • 2019-04-26
  • 2020-02-08
  • 1970-01-01
相关资源
最近更新 更多