Javascript JSON对象数组中一个元素的增量值
我有一个JSON,它包含id和点。如果ID匹配,我需要增加1。如果id不匹配,我需要推送到一个新的空数组 这是我试过的。但它不起作用Javascript JSON对象数组中一个元素的增量值,javascript,json,Javascript,Json,我有一个JSON,它包含id和点。如果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.fin
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)
}
}
数组上的方法返回一个值,而不是您在本例中可能尝试使用的布尔值。如果没有匹配的值,它将返回undefined
此外,您实际上不需要外部if
并在其中嵌套一个
var点=[{
id:1,
分数:0
}, {
id:2,
分数:0
}, {
id:3,
要点:1
}]
风险值数据={
身份证号码:1
}
让temp=points.find(e=>e.id==data.id)
if(temp!=undefined){//这只是为了理解。`if`中的`undefined`将给出false。因此可以使用`if(!temp)`
温度点+=1
}否则{
点推送(数据)
}
控制台日志(点)代码>总是增加数组的第一个元素
var m = points.find(e => e)
=>
var m = points.find(e => e.id === data.id)
find
需要在给定元素时返回true或false的谓词。在第一行中,它总是返回元素本身,这是一个真实的值。因此,第一个元素是return新数据需要一个point属性,您可以稍微清理一下代码,以便更清楚地了解意图
var点=[{
id:1,
分数:0
}, {
id:2,
分数:0
}, {
id:3,
要点:1
}]
风险值数据={
身份证号码:1
}
//我们有一个数据对象。如果它是新的(在点中找不到),则将其添加为点计数0
//如果存在(我们在points数组中找到),则为现有元素增加一个点
让matchingPoint=points.find(p=>p.id==data.id);
如果(!匹配点){
数据点=0;
点。推送(数据);
}否则{
匹配点。点+=1;
}
console.log(点)
创建对象:
tagObject = {};
tagObject['contentID'] = []; // adding an entry to the above tagObject
tagObject['contentTypes'] = []; // same explanation as above
tagObject['html'] = [];
下面是我添加到上述标记对象的引用条目
ES 2015标准:函数(){}与()=>{}相同
这将增加特定对象键的计数。没有什么比得上“JSON数组”<代码>点
是一个对象数组。什么不起作用?我看到它工作m=points.find(e=>e)
这是错误的。您需要在回调中执行与if
条件相同的测试。当然,您应该重写它,以便只需这样做一次。@munimmuna只有当数据中的id与点中第一个元素的id相同时,它才起作用未定义的是一个错误值,它的计算结果将为false
,因此无需显式测试未定义的。您的答案中真正的解决方案是未提及和未解释的。@Andreas我明确地测试它只是为了解释,如果找不到值,它将返回未定义的
。为此添加了一条评论。在问题中,find
方法在if
中使用了两次,在if
中使用了一次,实际上并不需要。是比find
更适合用于条件句的方法。因为find
需要一个在给定元素时返回true或false的谓词。在第一行中,它总是返回元素本身,这是一个真实的值。如果这解决了您的问题,请您接受答案(向上/向下投票按钮下方的白色复选标记)以表明此问题已得到回答。谢谢
let found = Object.keys(tagObject).find(
(element) => {
return element === matchWithYourValueHere;
});
tagObject['occurrences'] = found ? tagObject['occurrences'] + 1 : 1;