【问题标题】:Check if item already exists in json array by matching ID通过匹配 ID 检查项目是否已存在于 json 数组中
【发布时间】:2014-03-18 17:11:50
【问题描述】:

所以我有这个购物车,作为 JSON。

[{"tuote":{"id":"2","name":"Rengas 2","count":16,"price":"120.00"}},{"tuote":{"id":"1","name":"Rengas 6","count":"4","price":"25.00"}},{"tuote":{"id":"4","name":"Rengas 4","count":"4","price":"85.00"}}]

Formatted here.

所以,我想防止其中两次出现相同的值,并通过它们的ids 匹配它们。

这是我目前的解决方案(像蟑螂一样的越野车,并没有真正完成这项工作),因为它唯一有效的时候是匹配值在 JSON 字符串中的第一个时。

for (var i = 0; i < ostoskori.length; i++) {

    if (ostoskori[i].tuote.id == tuoteID) {
        addToExisting(tuoteID, tuoteMaara); //this doesn't matter, it works.
        break //the loop should stop if addToExisting() runs
    }

    if (ostoskori[i].tuote.id != tuoteID) {
        addNew(tuoteID, tuoteNimi, tuoteMaara, tuoteHinta); //this doesn't matter, it works.
        //break 

        //adding break here will stop the loop, 
        //which prevents the addToExisting() function running
    }
}

ostoskori 是 json,如果您想知道的话。正如您可能看到的,对于 JSON 中包含的每个项目,addNew() 将运行的次数越多。

所以基本上,如果 JSON 具有与 tuoteID 相同的 id 值,则 addToExisting() 应该运行。如果 JSON 没有与 tuoteID 相同的值,请运行 addNew()

但是怎么做呢?

【问题讨论】:

  • 您可以维护一个正在添加的 id 数组,如果数组中没有 obj id,则用于下一个 obj 插入。

标签: javascript jquery json for-loop


【解决方案1】:

您可以使用some 来检查 id 是否已经存在。 some的美在于:

如果找到这样的元素,some 立即返回 true。

如果您要为较旧的浏览器提供服务,则该页面底部有一个 polyfill。

function hasId(data, id) {
  return data.some(function (el) {
    return el.tuote.id === id;
  });
}

hasId(data, '4'); // true
hasId(data, '14'); // false

所以:

if (hasId(data, '4')) {
  addToExisting();
} else {
  addNew();
}

Fiddle

【讨论】:

  • 看起来是一个完美但又紧凑的解决方案!一个关于它的问题:如果我输入4 没有引号,它会导致错误。是不是因为 JSON 中的 id 不是 ìnt
  • 是的。数据中的 id(当你解析它时它不再是 JSON)是一个字符串。
  • 好的,谢谢,你拯救了我的一天! (我正要退出,把我的键盘扔出窗外)
  • 您可以将=== 更改为== 并通过传入一个整数来逃避。但我通常建议尽可能使用严​​格相等。
  • 是的。这实际上是比我的尝试更轻松的选择!我现在可以摆脱 for 循环了。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-08-24
  • 1970-01-01
  • 2015-09-24
  • 2017-12-29
相关资源
最近更新 更多