javascript foreach返回结果包含名称
问题描述:
我有下面的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);
答
您可以使用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]);
}
}
});
答
这里是我会做什么。
我会遍历你的对象的键查找那些谁与“名”开头:
function logArrayElements(element, index, array) {
for(var i in element){
if(i.indexOf('name') === 0){
contName = element[i];
console.log('a[' + index + '] = ' + contName);
}
}
}
答
我知道我有点晚了比赛,但我只是想补充另一个替代用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>
以上此函数返回找到的所有作为数组的名称。该函数接受两个参数:要搜索的数组和正则表达式,以匹配要返回的值的键名称。
这也会得到一个名为'briname'的键(我刚刚发明了这个词)。 – YoannM 2014-10-06 03:30:04
他说“包含名字”,但他可能意味着你在说什么。固定,thx :) – SuitedSloth 2014-10-06 03:32:03
看起来不错,谢谢,是否有可能将它作为变量重新使用?例如,我尝试用名为myName =“name”的var替换名称;看到小提琴,但它不像你的例子那样返回结果? http://jsfiddle.net/08qxxm50/ – ak85 2014-10-06 03:58:40