【问题标题】:Find index of javascript "array of objects" based on object field value根据对象字段值查找javascript“对象数组”的索引
【发布时间】:2014-05-09 14:38:03
【问题描述】:

我有一个 Javascript 对象数组,我想查找特定对象字段与我的搜索条件匹配的数组元素(对象)的索引。

也就是数组的样子

  [{id:1, saved:0, name: "name1"}, {id:26, saved:0, name: "name2"},
    {id:3, saved:0, name: "name3"}, {id:15, saved:0, name: "name4"}]

我想找到元素的 id 字段等于 15 的元素的索引。 我正在使用 Angular 和 jquery。

【问题讨论】:

    标签: javascript jquery arrays angularjs


    【解决方案1】:

    你必须迭代,这是一个非常简单的例子

    var index = null;
    
    for (var i=0; i<array.length; i++) {
        if ( array[i].id == 15 ) {
            index = i;
            break;
        }
    }
    

    如果你只是想返回你可以做的对象,那么你可以得到索引

    var obj = array.filter(function(obj) {
        return obj.id == 15;
    }).shift();
    

    【讨论】:

      【解决方案2】:

      使用 ES6,您可以使用 Array#findIndex

      findIndex() 方法返回数组中满足提供的测试功能的第一个元素的index。否则返回-1

      var array = [{ id: 1, saved: 0, name: "name1" }, { id: 26, saved: 0, name: "name2" }, { id: 3, saved: 0, name: "name3" }, { id: 15, saved: 0, name: "name4" }],
          index = array.findIndex(({ id }) => id === 15);
      
      console.log(index);
      .as-console-wrapper { max-height: 100% !important; top: 0; }

      【讨论】:

        【解决方案3】:

        array.filter 是 JavaScript 实现这一点的更优雅的方法:

        var arrr = [{id:1, saved:0, name: "name1"}, {id:26, saved:0, name: "name2"},
        {id:3, saved:0, name: "name3"}, {id:15, saved:0, name: "name4"}];
        
        return arrr.filter( function( value ){ return value.id == 15; })[0];
        

        【讨论】:

        • 这种方式可以获取项目,但是如何获取该项目在数组中的索引呢?
        【解决方案4】:

        有多种方法可以做到这一点。

        您可以遍历数组并进行搜索。

        var search = 15;
        for(var index=0; index<input.length; index++) {
           if(input[index].id == search) {
               //Do whatever you want to do with this index.
           }
        }
        

        或者你可以先创建一个查找

        var lookup = {};
        for(var index=0; index<input.length; index++) {
           var element = input[index];
           lookup[element.id] = element;
           lookup[element.id].index = index;
        }
        

        现在,在每次后续查找搜索词时,您都可以执行以下操作

        var search = 15;
        if(lookup[search]) {
           var index = lookup[search].index;
        }
        

        【讨论】:

          【解决方案5】:

          试试这个:

          $.each(json.yourrootjson, function(i, v) {
              if (v.id == "15") {
                  alert(v.id);
                  alert(v.name);
                  alert(v.saved);
                  return;
              }
          });
          

          【讨论】:

            【解决方案6】:

            这是一个非常基本的方法。当然,您不会想像我一样静态地使用变量 keymatch,但我还必须了解更多关于您的代码的信息才能帮助您。

            var array = [{id:1, saved:0, name: "name1"}, {id:26, saved:0, name: "name2"},
                         {id:3, saved:0, name: "name3"}, {id:15, saved:0, name: "name4"}]
            
            var key = 'id';
            var match = 15;
            
            array.forEach(function(elem, i) {
                if (elem[key] === match) {
                    alert(i);
                }
            });
            

            【讨论】:

              【解决方案7】:

              那里有很多来源,但 while 循环似乎是迭代数组的最快方法。或者,我认为 Array.map() 是最干净的方式,但实际上速度相当慢。

              Benchmarks

              Article on loops

              var array = []; // your array
              var len = array.length;
              
              while (len-- ) {
                if ( array[i].id == 15 ) {
                  console.log(array[i])
                }
              }
              

              【讨论】:

                猜你喜欢
                • 2021-01-19
                • 1970-01-01
                • 1970-01-01
                • 2011-08-10
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                相关资源
                最近更新 更多