2014-10-06 97 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>

以上此函數返回找到的所有作爲數組的名稱。該函數接受兩個參數:要搜索的數組和正則表達式,以匹配要返回的值的鍵名稱。