我有以下javascript,它返回每个项目的name1值。
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);
答案 0 :(得分: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] );
}
}
});
答案 1 :(得分:1)
这就是我要做的事。
我会遍历你的对象的键,找到那些以'name'开头的人:
function logArrayElements(element, index, array) {
for(var i in element){
if(i.indexOf('name') === 0){
contName = element[i];
console.log('a[' + index + '] = ' + contName);
}
}
}
答案 2 :(得分: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>
上面的这个函数返回所有作为数组找到的名字。该函数接受两个参数:要搜索的数组和正则表达式,以匹配要返回的值的键名。