以奇数结尾的所有对象键中打印所有偶数

Print all even values in all object key end with odd value

我想打印所有以奇数结尾的对象键中的所有偶数,但我刚才所做的编码仅指定用于 arr1、arr3 和 arr5。谁能建议我如何修复 'let oddArr' 方法(可能在循环中),以便当我将 arr1 更改为 arr7 时,结果是一样的。

var num = {
    arr1 : [1, 2, 3, 4, 5, 6, 7, 8, 9, 10],
    arr2 : [11, 12, 13, 14, 15, 16, 17, 18, 19, 20],
    arr3 : [21, 22, 23, 24, 25, 26, 27, 28, 29, 30],
    arr4 : [31, 32, 33, 34, 35, 36, 37, 38, 39, 40],
    arr5 : [41, 42, 43, 44, 45, 46, 47, 48, 49, 50],
    };

    let oddArr = [...num.arr1, ...num.arr3, ...num.arr5] //need some correction here
    let evenNum = oddArr.filter(number => number % 2 == 0);

    console.log(evenNum.toString());
    
    //help me fix 'let oddArr' (maybe in loop method) so that when I changed the object of the array (e.g: arr1 -> arr7) it would come out with the same result 
    
    //the result/output should be 2,4,6,8,10,22,24,26,28,30,42,44,46,48,50 based on var num

您可能想使用

let oddArr = Object.entries(num).filter(   // filter key names
   e => +e[0].replace("arr", '') % 2 !== 0 // replace "arr" and check if X in arrX is odd
).map(e => e[1]).flat()                    // merge values and flattern array

如果“arrX”命名不一致,您也可以使用正则表达式:

+e[0].match(/\d+/) % 2 !== 0

查看下面的工作片段:

var num = {
  arr1: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10],
  arr2: [11, 12, 13, 14, 15, 16, 17, 18, 19, 20],
  arr3: [21, 22, 23, 24, 25, 26, 27, 28, 29, 30],
  arr4: [31, 32, 33, 34, 35, 36, 37, 38, 39, 40],
  arr5: [41, 42, 43, 44, 45, 46, 47, 48, 49, 50],
};

let oddArr = Object.entries(num).filter(
  e => +e[0].replace("arr", '') % 2 !== 0
).map(e => e[1]).flat()

let evenNum = oddArr.filter(number => number % 2 == 0);
console.log(evenNum.toString());

您可以尝试像下面这样使用 for in 循环,它可以将任何最后一个字符作为奇数处理。

var num = {
  arr1: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10],
  arr2: [11, 12, 13, 14, 15, 16, 17, 18, 19, 20],
  arr3: [21, 22, 23, 24, 25, 26, 27, 28, 29, 30],
  arr4: [31, 32, 33, 34, 35, 36, 37, 38, 39, 40],
  arr7: [41, 42, 43, 44, 45, 46, 47, 48, 49, 50]
};

let oddArr = [];
for (let key in num) {
  if (key.charAt(key.length - 1) % 2 !== 0) {
    oddArr = [...oddArr, ...num[key]];
  }
}

let evenNum = oddArr.filter((number) => number % 2 === 0);

console.log(evenNum.toString());

这也行。

var num = {
  arr1: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10],
  arr2: [11, 12, 13, 14, 15, 16, 17, 18, 19, 20],
  arr3: [21, 22, 23, 24, 25, 26, 27, 28, 29, 30],
  arr4: [31, 32, 33, 34, 35, 36, 37, 38, 39, 40],
  arr5: [41, 42, 43, 44, 45, 46, 47, 48, 49, 50],
  arr6: [51, 52, 53, 55, 55, 56, 57, 58, 59, 60],
  arr7: [61, 62, 63, 66, 65, 66, 67, 68, 69, 70],
};

var evenNums = Object.keys(num).filter((item) => {
    itemNum = item.replace("arr", "");
    return itemNum % 2 !== 0;
}).map((o) => num[o]).flat().filter((x) => x % 2 == 0);

console.log(evenNums);