【问题标题】:How to iterate over array of objects and push to new array based on unique key values如何迭代对象数组并根据唯一键值推送到新数组
【发布时间】:2017-11-09 14:38:20
【问题描述】:

无法将整个问题放在标题中。 我有一个对象数组,每个对象都有两个键值。 第一个键值是一个字符串,第二个是另一个对象数组。

我需要遍历这个数组,以便我只有唯一的主名称。 如果名称已经存在于新数组中,则仅将相关数组推送到相应的对象。我希望这对阅读本文的人有某种意义。

我想要迭代的数组示例:

[
{master: 'Omni Mixer Homogenizer', related: [{_id: "59f5f1fe7d079b6be8fdef5c", id: 75, product_name: "product name"}]},
{master: 'Omni Mixer Homogenizer', related: [{_id: "59f5f1fe7d079b6be8fdef5e", id: 89, product_name: "product name"}]},
{master: 'μHB MICRO HOMOGENIZER', related: [{_id: "59f5f1fe7d079b6be8fdef5r", id: 102, product_name: "product name"}]},
{master: 'μHB MICRO HOMOGENIZER', related: [{_id: "59f5f1fe7d079b6be8fdef5f", id: 67, product_name: "product name"}]},
{master: 'Omni Mixer Homogenizer', related: [{_id: "59f5f1fe7d079b6be8fdef5z", id: 92, product_name: "product name"}]},
]

根据上面的数组,我想得到如下所示的结果:

[
{master: 'Omni Mixer Homogenizer', related: [{_id: "59f5f1fe7d079b6be8fdef5c", id: 75, product_name: "product name"}, {_id: "59f5f1fe7d079b6be8fdef5e", id: 89, product_name: "product name"},{_id: "59f5f1fe7d079b6be8fdef5z", id: 92, product_name: "product name"}]},
{master: 'μHB MICRO HOMOGENIZER', related: [{_id: "59f5f1fe7d079b6be8fdef5r", id: 102, product_name: "product name"}, {_id: "59f5f1fe7d079b6be8fdef5f", id: 67, product_name: "product name"}]},
]

任何帮助将不胜感激,谢谢。

【问题讨论】:

  • 建议更好的标题会很有帮助。
  • 你是把整个对象推到数组还是只是名字?
  • 请以文本形式添加代码。
  • 我在上面添加了一些我正在使用的代码。
  • "第二个是另一个对象数组" - 它总是只有一个元素?似乎首先提供此数组的代码不太正确,而不是使用javascript正确格式化数组的创可贴,无论首先提供数组的技术(php?)应该是固定。

标签: javascript arrays sorting javascript-objects


【解决方案1】:

你不需要 underscore.js。

let objects = [
{master: 'Omni Mixer Homogenizer', related: [{_id: "59f5f1fe7d079b6be8fdef5c", id: 75, product_name: "product name"}]},
{master: 'Omni Mixer Homogenizer', related: [{_id: "59f5f1fe7d079b6be8fdef5e", id: 89, product_name: "product name"}]},
{master: 'μHB MICRO HOMOGENIZER', related: [{_id: "59f5f1fe7d079b6be8fdef5r", id: 102, product_name: "product name"}]},
{master: 'μHB MICRO HOMOGENIZER', related: [{_id: "59f5f1fe7d079b6be8fdef5f", id: 67, product_name: "product name"}]},
{master: 'Omni Mixer Homogenizer', related: [{_id: "59f5f1fe7d079b6be8fdef5z", id: 92, product_name: "product name"}]},
]

function process(object) {
  let results = [];
  objects.forEach(object => { // iterate through array
    let result = results.find(x => x.master === object.master); 
    if (result) { // if item with "master" exists 
      object.related.forEach(item => { // add all realted items to existing items "related" array
        if (!result.related.find(x => x._id === item._id)) {
          result.related.push(item);
        }
      });
    } else { // otherwise add an item to "results" array
      results.push(object);
    }
  });
  return results;
}

console.log(process(objects));

【讨论】:

  • 非常感谢您抽出宝贵时间帮助我。您的解决方案完美运行。我也很欣赏 cmets:)
  • 你有更好的标题,更适合我使用,以便这个问题可以帮助其他人吗?
  • 真正归结为“在 javascript 中迭代对象数组”
猜你喜欢
  • 2021-12-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-11-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多