首页 > 解决方案 > Javascript,更改对象值然后调用 Object.keys( ).forEach 中的函数

问题描述

我需要遍历下面屏幕截图中给出的数组对象。在此处输入图像描述

然后每次用 if 语句检查第三个元素(红色标记),并根据下面的 if 语句更新它。在转换第三个元素后,我需要调用一个函数calculateNormalizedProduct作为参数传递 updated Products[key],问题是当console.log我仍然看到相同的值时..我写这个的方式有什么问题..?

var Products_Norm={}

Object.keys(Products).forEach(function (key) {

if (Products[key][2]==2){
    Products[key][2]=2

}
else if (Products[key][2]==24) {
    Products[key][2]=3

}
else if (Products[key][2]==720){
    Products[key][2]=15

}
else {
    Products[key][2]=0
}
console.log('before normalization and after convertion',Products[key],'Products[key][2]',Products[key][2])


Products_Norm[key]=calculateNormalizedProduct(Products[key],options)

console.log('after called normalization',Products_Norm[key])
})

一个例子是当输入(对象的数组)是

[30,9,24,0,9,9,price:339]

输出应该是

[30,9,3,0,9,9,price:339]

在更新的数组上调用函数calculateNormalizedProduct。这应该沿着对象的所有数组完成,并将结果保存在Products_Norm

我将稍微改变输出的目标,将 Products 对象的值保存在一个新对象中 , convertedProduct以便我们 Products[key]假设[30,9,24,0,9,9,price:339]convertedProduct[key]=[30,9,3,0,9,9,price:339]

所以除了第三个元素之外几乎相同的对象。

标签: javascriptarraysobject

解决方案


您可以使用for...in来迭代对象,然后使用map

// iterate the object 
for (let keys in arr) {
  // cheekc if the value is an array
  if (Array.isArray(arr[keys]) {
      // use map to return new array of element
      arr[keys] = arr.keys.map((item, index) => {
        // if index === 2 mean third element
        if (index === 2) {
          // check if 2 then return 2
          if (item === 2) {
            return 2
          } else if (item === 24) {
            return 3;
          } else if (item === 720) {
            return 15
          }

        } else {
          // index is other than 2 return original element
          return item;
        }
      })
    }
  }
if (Products[key][2]==2){ Products[key][2]=2 } else if (Products[key][2]==24) { Products[key][2]=3 } else if (Products[key][2]==720){ Products[key][2]=15 }


推荐阅读