【问题标题】:How to find whether there exists an object in json[] based on a particular field value using javascript如何使用javascript根据特定字段值查找json []中是否存在对象
【发布时间】:2017-07-19 06:33:48
【问题描述】:

我有一个 json 对象

var arr=[{"id":"1","ref":"100"},{"id":"2","ref":"200"},{"id":"3","ref":"100"}]

现在我有一个函数可以传递一个新的 json 对象 ex.{"id":"4","re​​f":"400"},然后我需要搜索 arr[] 是否有任何对象是否具有相同的 ref。如果该 ref 没有元素,那么我需要推送到 arr。如果没有。我们该怎么做

var arr = [];
var obj = {"id":"4","ref":"400"};
function(obj){
    if(!arr.contains(obj.ref)) //this didn't work
    {
        arr.push(obj);
    }
}

我们如何检查这个条件是否存在数组中具有相同 ref 的对象。

【问题讨论】:

标签: javascript node.js meteor


【解决方案1】:

您可以将Array#includes 与正确的回调一起使用。

var arr = [{"id":"1","ref":"100"},{"id":"2","ref":"200"},{"id":"3","ref":"100"}],
    obj = {"id":"4","ref":"400"};


if(!arr.includes(o => o.ref === obj.ref)) {
    arr.push(obj);
}

console.log(arr);
.as-console-wrapper { max-height: 100% !important; top: 0; }

【讨论】:

  • 请注意,它是 ES7 功能,无法在某些 platforms 上运行
  • @Nina 这行得通..但是当一个对象被推入 arr 并且如果该对象的 ref 更新为已处理时,我需要启动 5 分钟的计时器计数,我需要删除该对象arr..我们该怎么做?
  • @user7350714,你可以作为一个新问题,因为这个问题需要更多的信息,而不是在不同问题的 cmets 中提出和回答。
【解决方案2】:

使用函数some,在ES5中也可以使用

var arr = [{"id":"1","ref":"100"},{"id":"2","ref":"200"},{"id":"3","ref":"100"}]

var obj1 = {"id":"4","ref":"400"};
var obj2 = {"id":"5","ref":"200"};

function addSth(obj){
  if(!arr.some(function(el){return (el.ref === obj.ref)}))
  {
    arr.push(obj);
  }
}

addSth(obj1);
addSth(obj2);

console.log(arr)

【讨论】:

  • 还有一件事..一旦我们推送该对象,我需要设置一个 5 分钟的时间间隔,如果 ref 值更新为已处理,则在此间隔内。我需要从 arr 中删除该对象。如何我们这样做?
  • 查看函数window.setInterval
  • @barbasan 在上面如果,在 arr 对象中已经存在一个具有相同 ref 的对象,如何从 arr...slice 中删除整个对象?
  • 有很多方法可以实现。见one related questionsecond
【解决方案3】:

试试这个。它会工作

var arr = [{“id”:“1”,“ref”:“100”},{“id”:“2”,“ref”:“200”},{“id”:“3 ", "ref": "100" }]

obj = { "id": "4", "ref": "100" };

    var result = 0;
    for (var i = 0; i < arr.length; i++) {           
        if (arr[i].ref == obj.ref) {
            result = result + 1;
        }            
    }
    if (result == 0) {
        arr.push(obj);
    }

【讨论】:

    猜你喜欢
    • 2021-01-19
    • 1970-01-01
    • 2020-06-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-12-24
    • 1970-01-01
    相关资源
    最近更新 更多