2014-10-06 76 views
2

我有下面的JavaScript,它返回每个项目的name1值。javascript foreach返回结果包含名称

var data = [{"name1": "aaa", "name2":"bbb", "other":"ccc"},{"name1": "ddd", "name2":"eee", "other":"fff"}]; 

function logArrayElements(element, index, array) { 
    contName = element.name1; 
    console.log('a[' + index + '] = ' + contName); 
} 

data.forEach(logArrayElements); 

//returns below in console 
a[0] = aaa 
a[1] = ddd 

我想返回包含每个项目的名称的所有值。 我可以通过添加

contName2 = element.name2; 
console.log('a[' + index + '] = ' + contName); 

这样做不过我不想列举出来,因为我将有一个不同的量在不同场合的名字“的。 我知道,当我搜索一个字符串,我可以做下面的,但不能解决如何工作类似的东西我上面有什么?

var myName = "name2"; 
console.log(myName.indexOf("name") > -1); 

回答

2

您可以使用array.filter然后步行每个对象的数组中,像这样:

var myArray = [ 
    {"name1": "aaa", "name2":"bbb", "other":"ccc"}, 
    {"name1": "ddd", "name2":"eee", "other":"fff"} 
]; 

myArray.filter(function(row){ 

    for(key in row){ 

     if(key.indexOf('name') === 0){ // only matches keys **starting** with "name" 

      console.log('a[' + key + '] = ' + row[key]); 

     } 

    } 

}); 
+0

这也会得到一个名为'briname'的键(我刚刚发明了这个词)。 – YoannM 2014-10-06 03:30:04

+1

他说“包含名字”,但他可能意味着你在说什么。固定,thx :) – SuitedSloth 2014-10-06 03:32:03

+0

看起来不错,谢谢,是否有可能将它作为变量重新使用?例如,我尝试用名为myName =“name”的var替换名称;看到小提琴,但它不像你的例子那样返回结果? http://jsfiddle.net/08qxxm50/ – ak85 2014-10-06 03:58:40

1

这里是我会做什么。

我会遍历你的对象的键查找那些谁与“名”开头:

function logArrayElements(element, index, array) { 
    for(var i in element){ 
     if(i.indexOf('name') === 0){ 
      contName = element[i]; 
      console.log('a[' + index + '] = ' + contName); 
     } 
    } 
} 
1

我知道我有点晚了比赛,但我只是想补充另一个替代用lodash混合。

var data = [{ 
 
    "name1": "aaa", 
 
    "name2": "bbb", 
 
    "other": "ccc" 
 
}, { 
 
    "name1": "ddd", 
 
    "name2": "eee", 
 
    "other": "fff" 
 
}]; 
 

 
function getFields(data, expression) { 
 
    var re = new RegExp(expression, "i"); 
 
    
 
    return _.reduce(data, function(result, object) { 
 
    return _.union(result, _.reduce(object, function(list, value, key) { 
 
     if (re.test(key)) { 
 
      return _.union(list, [value]); 
 
     } else { 
 
      return list; 
 
     } 
 
    }, [])); 
 
    }, []); 
 
} 
 

 
alert(getFields(data, '^name')); 
 
alert(getFields(data, '^other'));
<script src="//cdnjs.cloudflare.com/ajax/libs/lodash.js/2.4.1/lodash.js"></script>

以上此函数返回找到的所有作为数组的名称。该函数接受两个参数:要搜索的数组和正则表达式,以匹配要返回的值的键名称。

相关问题