【问题标题】:Add element to array conditionally有条件地向数组添加元素
【发布时间】:2021-05-06 22:59:21
【问题描述】:

我有两个数组

var arr1 = ["xxx", "yyy"]

var arr2 = [
 {domain="xxx", kwd="a", position=1},
 {domain="yyy", kwd="a", position=2},

 {domain="xxx", kwd="b", position=1},
 {domain="yyy", kwd="b", position=2},

 {domain="yyy", kwd="c", position=2},

 {domain="xxx", kwd="d", position=1}

 ]

我希望当 arr1 中的 在 arr2 中没有该域的 kdw 时,将推送 position="n/a"。所以基于上面的输出数组应该是:

var arr3 = [
 {domain="xxx", kwd="a", position=1},
 {domain="yyy", kwd="a", position=2},

 {domain="xxx", kwd="b", position=1},
 {domain="yyy", kwd="b", position=2},

 {domain="xxx", kwd="c", position="n/a"},
 {domain="yyy", kwd="c", position=2},

 {domain="xxx", kwd="d", position=1},
 {domain="yyy", kwd="d", position="n/a"},
    
]

我不知道如何实现这一目标。 我已经启动了这段代码,但我不知道它是否相关:

var arr1 = [domain="xxx", domain="yyy" ]
        
var arr2 = [{domain="xxx", kwd="a", position=1},{domain="yyy", kwd="a", position=2}, {domain="xxx", kwd="b", position=1}, {domain="yyy", kwd="b", position=2},{domain="yyy", kwd="c", position=2}, {domain="xxx", kwd="d", position=1}]   
    
    var arr3 [];
        
        var i;
        for (i = 0; i < arr2.domain.length; i++) { 
        if(// logic  ) {
            arr3.push({
            domain: arr2[i].domain,
            kwd: arr2[i].kwd,
            position: arr2[i].position
          }) else {
            arr3.push({
            domain: arr2[i].domain,
            kwd: arr2[i].domain,
            position: "n/a"
          }
        }
   }

}

提前感谢您的帮助。亲切的问候。

【问题讨论】:

  • 一个问题,arr2arr3 怎么不会产生错误?
  • 所有域值实际上都是唯一的吗?
  • @charlietfl 是的。
  • 然后提供具有唯一值和预期结果的样本。当你把它们都做成一样的时候很难弄清楚。见minimal reproducible example

标签: javascript jquery arrays


【解决方案1】:
var arr1 = ["xxx", "yyy"];

var arr2 = [
  { domain: "xxx", kwd: "a", position: 1 },
  { domain: "yyy", kwd: "a", position: 2 },

  { domain: "xxx", kwd: "b", position: 1 },
  { domain: "yyy", kwd: "b", position: 2 },

  { domain: "yyy", kwd: "c", position: 2 },

  { domain: "xxx", kwd: "d", position: 1 }
];

const grouped = arr2.reduce((group, entry) => {
  const lookup = group[entry.kwd] || {};
  return {
    ...group,
    [entry.kwd]: {
      ...lookup,
      [entry.domain]: entry
    }
  };
}, {});

const filledIn = Object.entries(grouped).reduce(
  (arr, [key, group]) => [
    ...arr,
    ...arr1.map((domain) =>
      domain in group
        ? group[domain]
        : {
            domain,
            kwd: key,
            position: "n/a"
          }
    )
  ],
  []
);

console.log(filledIn);

【讨论】:

  • 感谢您的帮助。我试图编辑你的脚本,但我遇到了一个问题。如果你可以看看stackoverflow.
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-04-24
  • 2020-07-11
  • 2020-07-30
相关资源
最近更新 更多