【问题标题】:Javascript : Compare two arrays and fill non matching elements with existing elementsJavascript:比较两个数组并用现有元素填充不匹配的元素
【发布时间】:2021-03-30 07:57:25
【问题描述】:

我有一个数组1

var arr1 = ["27", "20", "18", "15", "14", "13", "8", "6", "2", "1"]

我有另一个数组 2,它总是显示从 1 到 30

var arr2 = ["1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15", "16", "17", "18", "19", "20", "21", "22", "23", "24", "25", "26", "27", "28", "29", "30"]

我想比较这两个数组并在array1中填充“NULL”以获取array1中不存在的其余值

基本上我的最终数组应该显示为

finalArray = ["1", "2", null, null, null, "6", null, "8", null, null, null, null, "13", "14", "15", null, null, "18", null, null, null, null, null, null, null, null, "27", null, null, null]

已尝试在第二个数组中循环第一个数组。但是未能将空值推送到其余元素。如何做到这一点? TIA

【问题讨论】:

  • SO 不是免费的代码编写服务。如果您已经尝试自己解决此问题,请展示您的方法并解释您遇到的问题(包括错误和minimal reproducible example
  • 另外,您是想原地更改arr1,还是保持arr1 不变并创建一个全新的数组?
  • 请问你为什么需要arr2,如果它总是包含数字字符串,从'1''30' 排序?

标签: javascript arrays loops


【解决方案1】:

您可以简单地通过遍历 arr2 并检查当前项目是否在 arr1 中来执行以下操作。如果项目在 arr1 中,则将项目放入新数组中,否则放入 null,

var arr1 = ["27", "20", "18", "15", "14", "13", "8", "6", "2", "1"]

var arr2 = ["1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15", "16", "17", "18", "19", "20", "21", "22", "23", "24", "25", "26", "27", "28", "29", "30"]

res = arr2.map(item => arr1.includes(item) ? item : null);

console.log(res);

【讨论】:

    【解决方案2】:

    我会以不同的方式来做。

    首先,使用arr1 创建一个Map,然后遍历主数组,即arr2,并检查Map 中是否存在该值。如果可用,使用相同的 else 填充它。

    var arr1 = ["27", "20", "18", "15", "14", "13", "8", "6", "2", "1"]
    
    var arr2 = ["1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15", "16", "17", "18", "19", "20", "21", "22", "23", "24", "25", "26", "27", "28", "29", "30"];
    
    //Create a MAP using `arr1` so that while searching it'll be easy
    let mappingObj = {};
    arr1.forEach(val => {
      mappingObj[val] = val;
    });
    
    let res = arr2.map(val => mappingObj[val] || null)
    console.log(res);

    【讨论】:

      【解决方案3】:

      如果arr2 总是包含数字字符串,从'1''30',你甚至不需要使用它。你可以这样做:

      const arr1 = ["27", "20", "18", "15", "14", "13", "8", "6", "2", "1"];
      
      const finalArray = (new Array(30)).fill(null);
      
      arr1.forEach(item => {
        finalArray[parseInt(item) - 1] = item;
      });
      
      console.log(finalArray);

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2015-10-05
        • 1970-01-01
        • 1970-01-01
        • 2016-06-19
        • 1970-01-01
        • 2022-01-27
        • 1970-01-01
        相关资源
        最近更新 更多