【问题标题】:count each values in 2 arrays, and if the length each arrays not same, push that values which has longer length计算 2 个数组中的每个值,如果每个数组的长度不同,则推送具有较长长度的值
【发布时间】:2019-06-09 10:27:44
【问题描述】:

如何将数组长度中的计数值推送大于另一个长度?

假设我想添加和减去 2 个数组中的值,

IF 'index' is even
  we do arr1 + arr2
  push to 'newarr'
ELSE IF 'index' is odd
  we do arr1 - arr2
  push to 'newarr'

IF the each arrays not same length
  we should push that values array to newarr

示例案例:

function countTwoarray(arr1, arr2) {
  var result = []
  for(key in arr1 && arr2){
    if(key % 2 === 0){
      result.push(arr1[key] + arr2[key])
    } else if(key % 2 === 1){
      result.push(arr1[key] - arr2[key])
    } 
      // else if(!key){
      // result.push("in")
   // }
  }
  return result
}

console.log(countTwoarray([1, 3, 2, 1, 1], [1, 2, 3, 4, 5,1000])) 
// [ 2, 1, 5, -3, 6, 1000 ]

你可以看到最后的结果是NaN NaN 结果必须是1000,因为这是arr2 的值,length longerarr1 长度

我想要这个[ 2, 1, 5, -3, 6, 1000 ]的结果

【问题讨论】:

    标签: javascript arrays for-loop numbers boolean


    【解决方案1】:

    首先,使用带有索引计数器的经典 for statement,而不是 for ... in statement,您可以在其中迭代的不仅仅是所需的索引。

    然后使用Math.min 获取两个数组的最小长度的长度变量,并通过使用conditional (ternary) operator ?:[条件(三元)推送差值或总和来迭代数组。

    最后取出每个数组的其余部分,并将此值从spread syntax ... 的最小长度推入Array#slice 的结果集,其中每个项目都作为参数。

    function countTwoarray(arr1, arr2) {
        var result = [],
            i,
            l = Math.min(arr1.length, arr2.length)
    
      for (i = 0; i < l; i++) {
          result.push(i % 2 ? arr1[i] - arr2[i] : arr1[i] + arr2[i]);
      }
      result.push(...arr1.slice(l), ...arr2.slice(l));
      return result;
    }
    
    console.log(countTwoarray([1, 3, 2, 1, 1], [1, 2, 3, 4, 5, 1000]));

    【讨论】:

    • 我明白了,我对 ```result.push(...arr1.slice(l), ...arr2.slice(l))` 有点困惑 @ NinaScholz
    • 它只需要剩下的数组,在一种情况下它应该是一个空数组,在其他一些项目中。
    • 是的,我试图在切片后创建另一个变量来检查,但如果它们为空,那么如果变量为空并不意味着未定义?如果它是未定义的,并将其推送到结果 arr,则该值将在该 arr 结果中未定义
    • 是的,如果我们传播它,它不会推送到那个。结果 arr,我试图不使用传播,如果不使用传播,结果类似于[ 2, 1, 5, -3, 6, -998, [], [ 1 ] ]
    猜你喜欢
    • 2011-12-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-04-27
    • 2012-04-20
    • 1970-01-01
    • 2013-07-17
    • 1970-01-01
    相关资源
    最近更新 更多