我有一个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)
}
}
答案 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;
这将增加特定对象键的数量。