如果每个键都有一个数字数组,如何搜索和替换对象属性值? Javascript

问题描述

假设我们有一个对象,每个属性都有一个数字数组:

const obj = {
    line1: [2,13,7,6,14],line2: [25,16,24,27,28],line3: [41,31,32,44,42],};

我们如何搜索特定号码并将其替换为另一个号码?
假设我们想找到数字 44 并将其替换为 88?以现代 JS 方式...

解决方法

您可以使用循环对对象的每个键值对进行迭代,然后您可以在数组中找到并替换您想要的数字。请记住,如果数字可以在同一个数组中多次出现,您也必须在数组上循环,否则您可以使用 indexOf 并分配新值。

这是一个例子:

const obj = {
  line1: [2,13,7,6,14],line2: [25,16,24,27,28],line3: [41,31,32,44,42],};

const changeNumber = (oldNum,newNum,obj) => {
  for (const [key,arr] of Object.entries(obj)) {
    const index = arr.indexOf(oldNum);
    if (index > -1) {
      arr[index] = newNum;
    }
  }
}
console.log(obj); // Before
changeNumber(44,88,obj);
console.log(obj); // After

/* With duplicates entries */
const changeNumberDuplicate = (oldNum,arr] of Object.entries(obj)) {
    let index = 0;
    do {
      index = arr.indexOf(oldNum,index);
      if (index > -1) {
        arr[index] = newNum;
      }
    } while (index > -1);
  }
}
const objDup = {
  line1: [2,44],line2: [44,};
console.log(objDup); // Before
changeNumberDuplicate(44,objDup);
console.log(objDup); // After