如何从JS对象创建新的JS数组

时间:2020-11-03 13:21:13

标签: javascript

我想从一个对象创建新的JS数组。我解释了我的情况,如下所示。

obj1

array (
  0 => 
  array (
    'item1' => 25,
    'item2' => 22,
    'item3' => 11,
  ),
  1 => 
  array (
    'item1' => 80,
    'item2' => 81,
    'item3' => 83,
    'item4' => 84,
  ),
  2 => 
  array (
    'item3' => array (
       'item1' => 85,
       'item2' => 85,
       'item3' => 85,
       'item4' => 85,
       'item5' => 85,
    ),
  ),
)

obj2

obj1 = {
  MMJ_KKL: {CODE: "SSW", YARN: 4500, WARN: "NBVC"},
  KKN_AAS: {CODE: "NNH", YARN: 1540, WARN: "MHYT"},
  LLK_PPO: {CODE: "KKI", YARN: 2312, WARN: "POIU"}
}

现在大家都可以看到obj1和obj2之间发生了变化。他们是

  • obj1.MMJ_KKL.YARN和obj2.MMJ_KKL.YARN
  • obj1.KKN_AAS.YARN和obj2.KKN_AAS.YARN 现在,需要创建新的数组并将其更改后的值放入其中。

******注意:我们不能在obj2中考虑RRE_WED。因为这样的值不包含在obj1中。

尝试的代码:

obj2 = {
  MMJ_KKL:{CODE: "SSW", YARN: 2300, WARN: "NBVC"},
  KKN_AAS:{CODE: "NNH", YARN: 3329, WARN: "MHYT"},
  LLK_PPO:{CODE: "KKI", YARN: 2312, WARN: "POIU"},
  RRE_WED:{CODE: "QQA", YARN: 4430, WARN: "IUYT"}
}

预期输出:

Object.keys(obj2).forEach((item) =>
    const result = obj1.filter((item) => arr1[item.code] && !(obj2[item.product_code].YARN === item.YARN && obj2[item.WARN].note === item.WARN));
);

请帮助我解决这个问题。

2 个答案:

答案 0 :(得分:1)

我不确定我是否了解您要使用的所有条件,但这将为您提供预期的输出。

Object.keys(obj1)
  .filter(key => Boolean(obj2[key]))
  .filter(key => obj1[key].YARN !== obj2[key].YARN)
  .map(key => obj2[key]);

答案 1 :(得分:1)

假设您要将obj2合并到obj1:

1-使用stringify查找具有更改的属性。
2-使用扩展运算符...将obj2合并到obj1。

Object.keys(obj1)
    .filter((k)=>JSON.stringify(obj1[k]) !== JSON.stringify(obj2[k]))
    .map((k)=> ({...obj1[k], ...obj2[k]}))