对象数组的算术运算 - JavaScript

时间:2017-11-12 05:40:37

标签: javascript

我有一个JSON

const myJSON = [
    {
        name: 'compass',
        LocX: 35,
        LocY: 312
    },
    {
        name: 'another',
        LocX: 52,
        LocY: 32
    }
]

在UI中,如果用户想要将5号添加到两个属性中的一个,我该如何处理?

我已经在做

myJSON.map(x => x[userSelectedProperty] + 5)
// when user selected property is 'LocX', [40, 57]

但我希望完整的数组只更新值。

[
    {
        name: 'compass',
        LocX: 40,
        LocY: 312
    },
    {
        name: 'another',
        LocX: 57,
        LocY: 32
    }
]

我该怎么做?

5 个答案:

答案 0 :(得分:3)

使用Array#forEcah方法简单地迭代和更新对象属性,这足以达到此目的。



const myJSON = [{
    name: 'compass',
    LocX: 35,
    LocY: 312
  },
  {
    name: 'another',
    LocX: 52,
    LocY: 32
  }
];

let userSelectedProperty = 'LocX';
myJSON.forEach(x => x[userSelectedProperty] += 5);

console.log(myJSON);




如果您想创建新数组,请使用Array#map方法。



const myJSON = [{
    name: 'compass',
    LocX: 35,
    LocY: 312
  },
  {
    name: 'another',
    LocX: 52,
    LocY: 32
  }
];

let userSelectedProperty = 'LocX';
let res = myJSON.map(x => {
  // copy properties to a new object
  let y = Object.assign({}, x);
  y[userSelectedProperty] += 5;
  return y;
});

console.log(res);




答案 1 :(得分:2)

您可以在数组上使用.forEach循环来更新其中的属性,而不是创建新数组。



const myJSON = [
    {
        name: 'compass',
        LocX: 35,
        LocY: 312
    },
    {
        name: 'another',
        LocX: 52,
        LocY: 32
    }
];
var userSelectedProperty = "LocX";
// Update the array.
myJSON.forEach(t => t[userSelectedProperty] += 5);

console.log(myJSON);




答案 2 :(得分:1)

不需要map。使用forEach并更新键值



const myJSON = [{
    name: 'compass',
    LocX: 35,
    LocY: 312
  },
  {
    name: 'another',
    LocX: 52,
    LocY: 32
  }
]

function addNum(key, val) {
  myJSON.forEach(function(item) {
    item[key] = item[key] + val;

  })
}
addNum('LocX', 5)
console.log(myJSON)




答案 3 :(得分:1)

使用Object.assign只需



{{1}}




答案 4 :(得分:1)

尝试以下方法:



const myJSON = [
    {
        name: 'compass',
        LocX: 35,
        LocY: 312
    },
    {
        name: 'another',
        LocX: 52,
        LocY: 32
    }
]
var userInput = 5;
var final = myJSON.map((x, i)=>{
	return  {name:x.name ,LocX:x.LocX+userInput, LocY:x.LocY};
});
console.log(final);