【问题标题】:How do i match items of two different arrays by index in javascript ES6 [duplicate]我如何在javascript ES6中通过索引匹配两个不同数组的项目[重复]
【发布时间】:2019-03-15 19:57:56
【问题描述】:

我有:

array1 = [ "a" , "b" , "c" , "d" ]

array2 = [ 1 ,2 ,3 ]

结果应该是:

matchedArray = [ "a1" , "b2" , "c3"]

【问题讨论】:

  • 嗨,费利佩。欢迎来到 StackOverflow。在 StackOverflow 上发帖时,请务必发布 Minimal, Verifiable, and Complete (MVC) 示例,以便我们为您提供帮助。始终发布您尝试过的代码以及遇到问题的地方,以便我们为您提供具体帮助。
  • 我认为这些链接的答案中的任何一个都不是他们根据结果提出的要求。

标签: javascript ecmascript-6 functional-programming


【解决方案1】:

我认为您正在寻找的是地图功能:

let a = ["a", "b", "c", "d"];
let b = [1, 2, 3, 4, 5];
let shorterArray = a.length > b.length ? b : a;
let longerArray = b.length > a.length ? b : a;
let c = shorterArray.map((c, index) => (longerArray === a) ? longerArray[index] + c : c + longerArray[index]);
console.log(c);
//returns ["a1", "b2", "c3"]

【讨论】:

  • 你实际上可以像.map((c, index) => ...)那样在.map中获取索引,然后你就不需要找到索引了。但是,如果数组 b 的项目比您的数组 a 多,这将无法按预期工作
  • 哦,你是对的
【解决方案2】:

这是一个应该有所帮助的简单示例。如果可以,请尝试优化它!

array1 = [ "a" , "b" , "c" , "d" ];

array2 = [ 1 ,2 ,3 ];

newArr = [];

for (let i = 0; i < array1.length; i++){
  if (array2[i])
      newArr.push(array1[i]+array2[i])	
}

console.log(newArr);

【讨论】:

  • for 循环中的 if 语句将防止该错误。
  • 真的不知道为什么反对票。我提供了一个清晰简单的例子。
  • 我投了反对票,因为我认为它已关闭(基于现已删除的评论),但在我再次查看后删除了我的反对票。如果你把它放在可运行的 sn-p 里面会很方便,这样人们就可以看到它确实有效。
  • 天啊。我不知道有些用户会这样做。
  • @samanime 我不知道怎么做。大声笑
【解决方案3】:

很容易,您将遍历一个并将其添加到另一个,就像这样。

array1 = [ "a" , "b" , "c" , "d" ];

array2 = [ 1 ,2 ,3 ];

newArray = array2.map((number, index) => {
    return array1[index] + number;
});

【讨论】:

    【解决方案4】:

    看起来您想从两个数组的相同位置获取字符串并将它们组合起来。如果是这样的话,这样的事情应该可以解决问题。

    const a = ['a', 'b', 'c'];
    const b = [1, 2, 3, 4];
    
    function combine(a, b) {
      const result = [];
      
      // Use both lengths and || to handle uneven arrays
      for(var i = 0; i < a.length || i < b.length; i++) {
        if (a[i] && b[i]) { // make sure they both have values
          result[i] = a[i] + b[i];
        }
      }
      
      return result;
    }
    
    console.log(combine(a, b));

    【讨论】:

      【解决方案5】:

      您可以取数组的最小长度并通过减少数组来映射值。

      var array1 = ["a", "b", "c", "d"],
          array2 = [1, 2, 3],
          data = [array1, array2],
          min = Math.min(...data.map(({ length }) => length)),
          result = data.reduce((r, a) => a.slice(0, min).map((v, i) => (r[i] || '') + v), []);
          
      console.log(result);

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-11-23
        • 2022-11-02
        • 1970-01-01
        • 2018-08-14
        • 2018-02-22
        • 1970-01-01
        • 2015-08-04
        • 2020-04-24
        相关资源
        最近更新 更多