javascript foreach返回包含名称的结果

javascript foreach return results containing name

本文关键字:结果 包含名 foreach 返回 javascript      更新时间:2023-09-26

我有下面的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);

您可以使用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] );
        }
    }
});

以下是我要做的。

我会循环浏览你对象的密钥,找到那些以"name"开头的:

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>

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