【问题标题】:search for objects inside an array, based on a key with an array as a value根据以数组为值的键搜索数组内的对象
【发布时间】:2019-10-14 15:07:07
【问题描述】:

我有一个对象数组,每个对象都有一个 id 数组,我想返回一个具有特定 id 的对象数组,而不使用 es6。

var items = [
 {name: 'item 1', id: ['1', '2']},
 {name: 'item 2', id: ['2', '3']},
 {name: 'item 3', id: ['3']},
 {name: 'item 1', id: ['2', '4']},
];

我想返回所有 id 为 '3' 的对象

【问题讨论】:

    标签: arrays object


    【解决方案1】:

    假设您的id 数组已排序,您可以在O(n log k ) 中使用二分搜索执行此操作,其中nitems 的数量,k 是最大id 数组的大小。

    var values = [];
    items.forEach( function(item) {
       var res = binarySearch( item[id], 3 );
       if ( res != -1 ) {
         values.push(item);
       }
    });
    
    function binarySearch (arr, val) {
        var lo = 0;
        var hi = arr.length - 1;
    
        while (lo <= hi) {
            var mid = lo + ( hi - lo ) / 2;
    
            if (arr[mid] === val) {
                return mid;
            }
            if (val < arr[mid]) {
                hi = mid - 1;
            } else {
                lo = mid + 1;
            }
        }
        return -1;
    }
    

    【讨论】:

      【解决方案2】:

      如果你不能使用 ES6 语法,你总是可以使用旧的 for 循环:

      function findById(items, id){
          var result = [];
          for(var i = 0; i < items.length; i++)
              for(var j = 0; j < items[i].id.length; j++)
                  if(items[i].id[j] === id){
                      result.push(items[i]);
                      break;
                  }
          return result;
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2020-01-17
        • 2019-11-19
        • 2020-04-06
        • 1970-01-01
        • 1970-01-01
        • 2021-04-16
        • 1970-01-01
        • 2015-10-06
        相关资源
        最近更新 更多