【问题标题】:To insert missing element from one array to another object array将缺少的元素从一个数组插入到另一个对象数组
【发布时间】:2021-03-17 18:07:45
【问题描述】:

第一个数组是这样的

arrayA = [{x:"abc",y:2},{x:"cde",y:3},{x:"xyz",y:2}]

第二个数组是

arrayB = ["abc","cde","efg","ghi","xyz"]

我想将 arrayB 的元素作为键值对插入 arrayA 中,因为键是 arrayB 中的元素,值将为 0 我想要得到的 arrayResult 是这样的

arrayResult = [{x:"abc",y:2},{x:"cde",y:3},{x:"efg",y:0},{x:"ghi",y:0},{x:"xyz",y:2}]


我试过了,但没有得到所需的结果

for (let i = 0; i < arrayB.length; i++) {
 for (let j = 0; j <arrayA.length; j++) {
  if(arrayB[i] !== arrayA[j].x) {
   arrayA.push({x:arrayB[i],y:0})
   }
 }
}

我是 js 新手。谁能帮我解决这个问题?

【问题讨论】:

    标签: javascript arrays arraylist


    【解决方案1】:

    您可以对arrayA 的索引进行闭包并检查arrayB 的值是否等于第一个数组,然后返回该对象,否则创建一个新对象并通过迭代第二个数组来返回它。

    const
        arrayA = [{ x: "abc", y: 2 }, { x: "cde", y: 3 }, { x: "xyz", y: 2 }],
        arrayB = ["abc", "cde", "efg", "ghi", "xyz"],
        result = arrayB.map((i => x => arrayA[i].x === x
            ? arrayA[i++]
            : { x, y: 0 }
        )(0));
    
    console.log(result);
    .as-console-wrapper { max-height: 100% !important; top: 0; }

    【讨论】:

      【解决方案2】:

      您可以使用 Array.reduce 来完成这项工作:

      let arrayA = [{x:'abc', y:2}, {x:'cde', y: 3}, {x:'xyz', y:2}]
      let arrayB = ['abc', 'cde', 'efg', 'ghi', 'xyz']
      

      解决方法如下:

      const result = arrayB.reduce((acc, str) => {
      
        const found = arrayA.find(item => item.x === str)
      
          if(found) {
             acc.push(found) 
          } else{
            acc.push({x:str, y:0})
          }
      
          return acc
      },[])
      
      

      结果应该是你想要的??

      console.log(result) => // [{x:"abc",y:2},{x:"cde",y:3},{x:"efg",y:0},{x:"ghi",y:0},{x:"xyz",y:2}]
      

      使用 reduce 方法,您可以遍历 arrayB 并为它的每个项目检查 arrayA 中是否有一个对象,其属性 x 与项目匹配。

      是的,只需将它推到结果数组即可。

      案例没有,创建一个新对象 { x: , y: 0 }

      【讨论】:

        【解决方案3】:

        基于键 x 预处理和构建查找对象,并在 arrayB 上使用 map

        arrayA = [
          { x: "abc", y: 2 },
          { x: "cde", y: 3 },
          { x: "xyz", y: 2 },
        ];
        
        arrayB = ["abc", "cde", "efg", "ghi", "xyz"];
        
        const lookupA = arrayA.reduce((acc, curr) => ({ ...acc, [curr.x]: curr }), {});
        const result = arrayB.map((x) => lookupA[x] ?? { x, y: 0 });
        
        console.log(result)

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2022-10-23
          • 1970-01-01
          • 2012-06-22
          • 2019-05-03
          • 1970-01-01
          • 2019-12-22
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多