使用JavaScript

时间:2018-01-03 10:49:59

标签: javascript arrays

我在表单中快速搜索了我的问题,this post基本上涵盖了一个方面。我只是在寻求解决方案的建议。

基本上,我在对象数组中有一个名称 - 值对列表

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

假设我们有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;
  }
}

我的问题是,如果我想找到两个值怎么办?除了再次遍历数组寻找第二个值之外,还有更有效的方法吗?比如我们想要搜索name1和name2。我在考虑以下几点:

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;
    }

  }
}

这样我们只能循环遍历数组一次并且在找到两者时仍然会断开。这似乎是最好的方法,还是会有更有效的解决方案?

3 个答案:

答案 0 :(得分:1)

我会在数组上使用filter来执行此操作,它更容易阅读:

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

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

答案 1 :(得分:1)

您可以使用Map在O(1)时间内查找值,而不是在O(n)中从data构造O(n)时使用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')); n)时间:

&#13;
&#13;
import re
count = sum(1 for _ in re.finditer('(dance[^\\w])', line))
print(count)
&#13;
&#13;
&#13;

答案 2 :(得分:0)

对于只有一次查找,可以在解析过程中检索这些值:

&#13;
&#13;
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 )
&#13;
&#13;
&#13;

对于多次查找,生成查找对象的效率更高:

&#13;
&#13;
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 )
&#13;
&#13;
&#13;