【问题标题】:Map the elements of bi-dimensional array ignoring the last sub-array映射二维数组的元素,忽略最后一个子数组
【发布时间】:2018-08-06 02:38:48
【问题描述】:

假设有这个矩阵:

myArray = [["a", 6, 5.54, "b"],
           ["xxx", 65.5, 45],
           [343, "abc", 0.09]];

我的目标是计算每个子数组的总和,但忽略最后一个子数组,本例为[343, "abc", 0.09]。另外,忽略字符串值。

我设法对所有子数组都这样做了,它看起来像这样:

myArray = [["a", 6, 5.54, "b"],
           ["xxx", 65.5, 45],
           [343, "abc", 0.09]];

result = myArray.map(a => a.reduce((s, v) => s + (+v || 0), 0));
console.log(result)

不知道要添加哪个条件才能忽略最后一个子数组。

有什么想法吗?

【问题讨论】:

  • .map() 这样做没有什么意义,因为它旨在用于为源数组的每个元素生成一个值。您可以改用.reduce(),而不是在最后一次调用回调时更改累加器。
  • reduce 函数还接受两个附加参数:索引和数组。这应该可以为您提供确定您是否在最后一个索引上所需的信息。
  • 这很容易通过一个简单的循环来完成。

标签: javascript arrays


【解决方案1】:

使用函数slice(0, -1)

slice() 方法将数组的一部分的浅表副本返回到从开始到结束(不包括结束)选择的新数组对象中。原数组不会被修改。

第二个参数: 可以使用负索引,表示距序列末尾的偏移量。 slice(2,-1) 通过序列中倒数第二个元素提取第三个元素。

var myArray = [
  ["a", 6, 5.54, "b"],
  ["xxx", 65.5, 45],
  [343, "abc", 0.09]
];

var result = myArray.slice(0, -1).map(a => a.reduce((s, v) => s + (+v || 0), 0));

console.log(result);

【讨论】:

    【解决方案2】:

    我会这样做(如果它始终是最后一个元素,请使用 pop() 将其删除):

    myArray = [["a", 6, 5.54, "b"],
               ["xxx", 65.5, 45],
               [343, "abc", 0.09]];
               
    myArray.pop()
    
    result = myArray.map(a => a.reduce((s, v) => s + (+v || 0), 0));
     
    console.log(result)

    【讨论】:

      猜你喜欢
      • 2021-08-18
      • 1970-01-01
      • 1970-01-01
      • 2011-01-10
      • 2019-11-21
      • 1970-01-01
      • 2016-11-22
      • 1970-01-01
      相关资源
      最近更新 更多