2016-11-21 3 views
2

У меня есть объект, как такобъект Фильтр массив имен свойств

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

и массив

var arr = [name2, name3] 

Оба динамически создаваемых. Мне нужно фильтровать объект по массиву (именно по именам свойств, а не по его значениям). Но пока все методы, которые я нашел, касаются фильтра по значениям. Так результат должен быть

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

Я использую угловатый, подчеркивание. Мне нужно отфильтровать его не в шаблоне, а в контроллере. Я ценю любую помощь!

+0

ли вы имеете в виду 'уаг обр = [ "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

Смежные вопросы