增加JSON对象数组的一个元素的值

时间:2018-02-01 17:31:29

标签: javascript json

我有一个JSON,其中包含id和points。如果ID匹配,我需要增加1.如果id不匹配,我需要推送到一个新的空数组

这是我尝试过的。但它无法正常工作

var points = [{
  id: 1,
  point: 0
}, {
  id: 2,
  point: 0
}, {
  id: 3,
  point: 1
}]

var data = {
  id: 1
}

if (!(points.length)) {
  points.push(data)
} else {
  if (points.find(e => e.id === data.id)) {
    var m = points.find(e => e)
    console.log(m.id)
    m.point+= 1
  } else {
    points.push(data)
  }
}

4 个答案:

答案 0 :(得分:2)

你总是增加数组的第一个元素

var m = points.find(e => e)
=>
var m = points.find(e => e.id === data.id)

find需要一个谓词,给定一个元素返回true或false。在第一行中,它总是返回元素本身,这是一个真正的值。所以第一个元素是return

答案 1 :(得分:1)

数组上的find方法返回一个值而不是boolean,因为您可能正在尝试使用这种情况。如果没有值匹配,它将返回undefined

此外,您并不需要外部if并在其中再筑巢一次。



var points = [{
  id: 1,
  point: 0
}, {
  id: 2,
  point: 0
}, {
  id: 3,
  point: 1
}]

var data = {
  id: 1
}

let temp = points.find(e => e.id === data.id)
if (temp != undefined) { // This is just for understanding. `undefined` inside `if` will give false. So you can use `if(!temp)`
  temp.point+= 1
} else {
  points.push(data)
}

console.log(points);




答案 2 :(得分:1)

新数据需要一个点属性,您可以稍微清理一下代码以更清楚地了解意图......

var points = [{
  id: 1,
  point: 0
}, {
  id: 2,
  point: 0
}, {
  id: 3,
  point: 1
}]

var data = {
  id: 1
}

// we have a data object.  if it's new (not found in points) add it with a point count of 0
// if it exists (we find it in points array) increment point for the existing element

let matchingPoint = points.find(p => p.id === data.id);
if (!matchingPoint) {
    data.point = 0;
    points.push(data);
} else {
    matchingPoint.point += 1;
}
console.log(points)    

答案 3 :(得分:0)

创建对象:

tagObject = {};
tagObject['contentID'] = [];  // adding an entry to the above tagObject
tagObject['contentTypes'] = []; // same explanation as above
tagObject['html'] = [];

现在下面是我要添加到上述标签“对象”中的出现项。

ES 2015标准:function(){}与()=> {}

      let found = Object.keys(tagObject).find(
            (element) => {
                return element === matchWithYourValueHere;
            });

      tagObject['occurrences'] = found ? tagObject['occurrences'] + 1 : 1;

这将增加特定对象键的数量。