简体   繁体   English

使用JavaScript从对象数组中高效提取名称/值对

[英]Efficient name value pairs extraction from array of objects using JavaScript

I did a quick search for my question in the forms and this post basically covers it all apart from one aspect. 我以表格的形式快速搜索了我的问题, 这篇文章从一个方面基本上涵盖了所有问题。 I am just looking some advice on the proposal of a solution. 我只是在寻找解决方案建议的一些建议。

Basically, I have a list of name-value pairs in an array of objects 基本上,我在对象数组中有一个名称/值对列表

[{"name":"name1","value":"value1"},{"name":"name2","value":"value2"}] etc etc

Say we have 100 of these and I want to search for 1, one way to do this (the accepted answer in the linked post) would be as below: 假设我们有100个,我想搜索1,一种方法(链接文章中可接受的答案)如下:

var data = [{"name":"name1","value":"value1"},{"name":"name2","value":"value2"}];
for(var i=0;i<data.length;i++){
  if(data[i]['name'] == 'name2'){
    console.log('The value is: ' + data[i]['value']);
    break;
  }
}

My question is, what if I want to find two values? 我的问题是,如果我想找到两个值怎么办? Is there a more efficient way to do this other than looping through the array again looking for the second value? 除了再次遍历数组以查找第二个值以外,还有其他更有效的方法吗? Say for example we were wanting to search for name1 AND name2. 举例来说,我们要搜索name1和name2。 I was thinking of something along the lines of: 我在想一些类似的事情:

var data = [{"name":"name1","value":"value1"},{"name":"name2","value":"value2"}];

for(var i=0;i<data.length;i++){
  var x = 0;
  if(data[i]['name'] == 'name1'  || data[i]['name'] == 'name2'){

    if (data[i]['name'] == 'name1'){
        console.log('The value for name 1 is: ' + data[i]['value']);
        x++
    }

    if (data[i]['name'] == 'name2'){
        console.log('The value for name 2 is: ' + data[i]['value']);
        x++
    }

    if (x == 2)
    {
        break;
    }

  }
}

This way we would only be looping through the array once and still breaking when both are found. 这样,我们只会在数组中循环一次,而在找到两者时仍会中断。 Does this seem the best way to do it or would there be a more efficient solution? 这似乎是最好的方法,还是会有更有效的解决方案?

I would use filter on the array to do it, it's a bit easier to read: 我会在数组上使用filter来做到这一点,它更容易阅读:

var data = [
  { name: 'name1', value: 'value1' },
  { name: 'name2', value: 'value2' }
];

var result = data.filter(function(item) {
  return item.name === 'name1' || item.name === 'name2';
});

You can use a Map to look up values in O(1) time instead of using an Array in O(n) time after constructing it from the data in O(n) time: 从O(n)时间中的data构造出来后,可以使用Map在O(1)时间中查找值,而不是在O(n)时间中使用Array

 var data = [{"name":"name1","value":"value1"},{"name":"name2","value":"value2"}]; var map = new Map(data.map(function (obj) { return [obj.name, obj.value]; })); console.log(map.get('name1')); console.log(map.get('name2')); 

For only one lookup, the values can be retrieved during the parsing: 仅需一次查找,就可以在解析过程中检索这些值:

 var data = [], j = `[{"name":"name1","value":"value1"}, {"name":"name2","value":"value2"}, {"name":"name3","value":"value3"}]` JSON.parse(j, function(key, value) { if (value.name === 'name1' || value.name === 'name2') data.push(value); return value; }) console.log( data ) 

For multiple lookups, it's more efficient to generate a lookup object: 对于多次查找,生成查找对象更为有效:

 var names={}, j = '[{"name":"name1","value":"value1"},{"name":"name2","value":"value2"}]' JSON.parse(j, function(key, value) { if (value.name !== void 0) names[value.name] = value.value; return value; }) console.log( names.name1, names["name2"] ) console.log( names ) 

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

相关问题 在Javascript中从JSON数组中查找名称/值对的有效方法 - Efficient way to find name value pairs from JSON array in Javascript 从名称/值对的json / javascript数组中获取价值? - Getting value from json/javascript array of name/value pairs? 将名称值对添加到数组中并打印-Javascript - Add Name Value Pairs into an Array and Print - Javascript javascript 从对象数组中删除密钥对 - javascript removey key pairs from an array of objects 如何将{“name”:“myName”,“value”:“myValue”}对象的数组转换为“myName”的对象:JavaScript中的“myValue”对? - How do you convert an array of {“name”:“myName”,“value”:“myValue”} objects into an object of “myName”:“myValue” pairs in JavaScript? Javascript从该数组中附加对象并创建附加了对象键值对的新数组 - Javascript Append objects from this array and create new array with object key value pairs appended 在JavaScript中将值数组转换为对象(键值)对数组 - Convert array of values to array of objects (key-value) pairs in JavaScript 从 JavaScript 中的对象数组中删除的有效方法 - Efficient way to delete from an array of objects in JavaScript 来自数组的优化对,对的和为JavaScript中的随机值 - Optimisation pairs from array, sum of the pairs is Random value in JavaScript 使用ES6根据属性将javascript对象数组转换为数组的键-值对 - Converting array of javascript objects to key-value pairs of arrays based on property using ES6
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM