仅处理二维数组的数值

时间:2018-07-24 15:46:21

标签: javascript arrays

具有以下形式的数组:

anArray = [
    ["name0", 1, 3, 4, "name1"],
    ["name2", 5, 5, 12, 1],
];  

我只想对数组内部的数值执行某些操作,例如将它们加2。

我的解决方案无效:

anArray.forEach((subAr) => {
    subAr.filter(s => (typeof s) === 'number').map(a => a + 2);
});

你知道怎么了吗?

3 个答案:

答案 0 :(得分:2)

您不能像这样更改数字,必须使用子数组(例如,使用forEach来引用它们)

anArray.forEach(subAr => 
    subAr.forEach((n, i) => subAr[i] = typeof n == "number"? n + 2: n)
);

let anArray = [
    ["name0", 1, 3, 4, "name1"],
    ["name2", 5, 5, 12, 1],
];  

anArray.forEach(subAr => 
    subAr.forEach((n, i) => subAr[i] = typeof n == "number"? n + 2: n)
);

console.log(anArray);

或使用map替换整个子数组:

anArray = anArray.map(subAr => 
    subAr.map(n => typeof n == "number"? n + 2: n)
);

let anArray = [
    ["name0", 1, 3, 4, "name1"],
    ["name2", 5, 5, 12, 1],
];  

anArray = anArray.map(subAr => 
    subAr.map(n => typeof n == "number"? n + 2: n)
);

console.log(anArray);

答案 1 :(得分:1)

您没有使用forEach循环的结果。这段代码应该可以完成工作:

anArray = [
        ["name0", 1, 3, 4, "name1"],
        ["name2", 5, 5, 12, 1],
];  
anArray = anArray.map(subArray => subArray.map(el => (typeof el) ==="number" ? el + 2 : el ))

console.log(anArray);

答案 2 :(得分:0)

如果您想对数组进行突变,只需使用常规的for循环即可:

for(const subArray of anArray) {
  for(const [index, entry] of subArray.entries()) {
     if(typeof entry === "number") {
       subArray[index] = entry + 2;
     }
   }
}

或者,如果您喜欢不可读的代码,请执行以下操作:

anArray = anArray.map(subArray => subArray.map(entry => typeof entry === "number" ? entry + 2 : entry));