Javascript JSON对象数组中一个元素的增量值

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

我有一个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.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;