2016-02-27 3 views
2

Я следующий объект сказать,Как выбрать свойства из объекта в Javascript

{"id":"kl45wkfj1k4j34", "firstname":"Arun", "lastname":"K"} 

и у меня есть ключ к фильтроваться, «ПгвЬЫат, фамилией» назначенных в строке, используя запятую.

Как фильтровать этот объект, чтобы получить выход следующим образом:

{"firstname":"Arun", "lastname":"K"} 
+0

Этот объект имеет недопустимый ключ и значение. – Jai

+0

исправил пару значений ключа –

ответ

3

Underscore является то, что вы ищете.

var obj = { "id": 'kl45wkfj1k4j34', "firstname": "Arun", "lastname": "K" }; 
var filter = 'firstname, lastname', 
var result = _.pick(obj, filter.split(', ')); 
+0

Спасибо .. работал как ветер :-) –

0

Если у вас есть этот объект:

var obj = {"id":"kl45wkfj1k4j34", "firstname":"Arun", "lastname":"K"}; 

Тогда вы можете сделать это:

delete obj.id; 
console.log(obj); 

Сейчас, согласно комментарию:

var newlist = listarray.map(function (obj){ 
     delete obj.id; 
     return obj; 
}); 

Это создаст новый массив массивов без id.


Или с определенными ключами:

var newlist = listarray.map(function (obj){ 
     var o = {}; 
     o.firstname = obj.firstname; 
     o.lastname = obj.lastname; 
     return o; 
}); 
+0

Я получаю это, но дело в том, что у меня есть список ключей для фильтрации в виде строки, разделенной запятой. Любое предложение общего предложения? –

1

Вы можете использовать строку фильтра, расщепляется в качестве ключей для нового объекта.

var obj = { "id": 'kl45wkfj1k4j34', "firstname": "Arun", "lastname": "K" }, 
 
    filter = 'firstname, lastname'.split(', '), 
 
    result = {}; 
 

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

 
document.write('<pre>' + JSON.stringify(result, 0, 4) + '</pre>');

0

Если у Вас есть массив объектов, то используйте метод pick этого

data = [{ 
 
    "id": "kl45wkfj1k4j34", 
 
    "firstname": "Arun1", 
 
    "lastname": "K1" 
 
}, { 
 
    "id": "kl45wkfj1k4j14", 
 
    "firstname": "Arun2", 
 
    "lastname": "K2" 
 
}, { 
 
    "id": "2", 
 
    "firstname": "Arun3", 
 
    "lastname": "K3" 
 
}]; 
 

 
data = data.map(function(o) { 
 
    delete o.id; 
 
    return o 
 
}) 
 

 
document.write('<pre>' + JSON.stringify(data, 0, 4) + '</pre>');

0

Использование _.reduce

var data = {"id":"kl45wkfj1k4j34", "firstname":"Arun", "lastname":"K"} 
var filters = 'firstname, lastname'.split(', '); 
_.reduce(data,function(result,value,key){ 
if(filters.indexOf(key)!=-1){ 
    result[key] =value 
} 
return result; 
},{}) 
1
var toBeFilteredObject = {...}; // {"id":"kl45wkfj1k4j34", "firstname":"Arun", "lastname":"K"} 
var filteredObject = {}; 
'comma, seperated, string'.split(',').forEach(function(key) { 
    key = key.trim(); 
    filteredObject[key] = toBeFilteredObject[key]; 
}); 
1

Есть много способов, можно было бы идти об этом. Ответы до сих пор предполагают, что вы хотите изменить существующие объекты, но вопрос не указывается; слово «фильтр» предполагает, возможно, нет. Поэтому, если вы хотите создать новый фильтрованный объект, вместо того, чтобы мутировать существующий (ы), вы можете использовать функцию уменьшения. Вы сказали, что ваш ключевой список - это строка, но для того, чтобы сохранить примеры чистыми, предположим, что вы просто делаете str.split(',') или похожи, так что это уже массив, прежде чем передавать его этим функциям.

ES5

function createObjectFilter(keys) { 
    return function(obj) { 
    return keys.reduce(function(acc, key) { 
     acc[key] = obj[key]; 
     return acc; 
    }, {}); 
    }; 
} 

var myFilter = createObjectFilter([ 'a', 'b' ]); 

var filteredObject = myFilter(object); 

ES6

const createObjectFilter = keys => obj => keys.reduce((acc, key) => { 
    acc[key] = obj[key]; 
    return acc; 
}, {}); 

const myFilter = createObjectFilter([ 'a', 'b' ]); 

const filteredObject = myFilter(object); 

Теперь функция createObjectFilter возвращает действительную функцию фильтра на основе заданного списка ключей.Вы можете сделать это «все в одном», но преимущество этого подхода в том, что становится возможным повторно использовать фильтры в большем количестве ситуаций. Например:

const filteredObjects = unfilteredObjects.map(myFilter); 
Смежные вопросы