2016-11-21 48 views
2

我有像這樣Filter對象

var obj = { name1: somevalue1, name2: somevalue2, name3: somevalue3} 

的對象和陣列

var arr = [name2, name3] 

兩者都是動態創建的。 我需要通過數組來過濾對象(完全通過屬性名稱,而不是通過它的值)。 但到目前爲止,我發現的所有方法都是按值過濾的。 所以結果應該是

var result = {name2: somevalue2, name3: somevalue3} 

我正在使用角度,下劃線。我需要過濾它不是在模板中,而是在控制器中。 我感謝任何幫助!

+0

你的意思是'無功ARR = 「NAME2」, 「NAME3」]'? – Rayon

+0

是的,它的var arr = [「name2」,「name3」] – jmt

回答

2

您可以使用_.pick「過濾」該對象。

var obj = { name1: "somevalue1", name2: "somevalue2", name3: "somevalue3"}; 
 
var keys = ["name1", "name2"]; 
 

 
console.log(_.pick(obj, keys));
<script src="https://cdnjs.cloudflare.com/ajax/libs/underscore.js/1.8.3/underscore-min.js"></script>

+0

太優雅了,謝謝! – jmt

+0

不客氣:) – acontell

1

您可以迭代鍵並使用鍵值對構建新對象。

var obj = { name1: 'somevalue1', name2: 'somevalue2', name3: 'somevalue3' }; 
 
    arr = ['name2', 'name3'], 
 
    result = Object.create(null); 
 

 
arr.forEach(function (k) { 
 
    result[k] = obj[k]; 
 
}); 
 

 
console.log(result);

+0

'Array#reduce'可以使用! – Rayon

+1

沒錯,那也行。 –

+1

謝謝你,你救了我的一天! – jmt

1

您可以使用reduce()返回對象。

var obj = { 
 
    name1: 'somevalue1', 
 
    name2: 'somevalue2', 
 
    name3: 'somevalue3' 
 
} 
 
var arr = ['name2', 'name3'] 
 

 
var result = Object.keys(obj).reduce(function(r, e) { 
 
    if (arr.indexOf(e) != -1) r[e] = obj[e]; 
 
    return r; 
 
}, {}) 
 

 
console.log(result)

+0

時間複雜度是'n2'。它可以在'n'完成 – intekhab

0

爲數組的每個元素迭代,並檢查是否元件在對象可作爲密鑰名稱然後將其放在結果。

var obj = { name1: somevalue1, name2: somevalue2, name3: somevalue3};// This is ur object 

var arr = [name2, name3];// and this is the array for each element you have to get values from obj 

var filterResult = {};// An object to stored the filtered values 

arr.forEach(function(elem){ // Iterate for each element of array 
    if (obj[elem]) // check in your data object if any key is available of the name of array element 
     filterResult[elem] = obj[elem]; // then put it in filtered object 
}); 

console.log(filterResult); 
+0

雖然這段代碼可能回答這個問題,但提供關於爲什麼和/或代碼如何回答這個問題的附加上下文會提高它的長期價值。 – ryanyuyu

相關問題