2016-09-20 4 views
0

У меня есть данные, что выглядит следующим образом:Фильтр массив объектов

[{address: '1300 BRYANT ST', 
    block: '3903', 
    cnn: '517000', 
    latitude: '37.7690871267671', 
    longitude: '-122.411527667132', 
    received: '2016-05-06', 
    x: '6009188.668', 
    y: '2108146.472' }, {B...}, {C...}] 

Я хочу, чтобы фильтровать данные, чтобы выглядеть следующим образом:

[{address: '1300 BRYANT ST', 
    latitude: '37.7690871267671', 
    longitude: '-122.411527667132'}, 
    ...] 

Как отфильтровать эти данные с помощью JavaScript?

ответ

4

Простой способ сделать это с array .map() method:

var arr = [{address: '1300 BRYANT ST', block: '3903', cnn: '517000', latitude: '37.7690871267671', longitude: '-122.411527667132', received: '2016-05-06', x: '6009188.668', y: '2108146.472' }, {address: '12 ANOTHER ST', block: '3903', cnn: '517000', latitude: '12.7690871299999', longitude: '44.412300067132', received: '2016-05-06', x: '6009188.668', y: '2108146.472' }]; 
 

 
arr = arr.map(function(v) { 
 
    return { 
 
     address: v.address, 
 
     latitude: v.latitude, 
 
     longitude: v.longitude 
 
    }; 
 
    }); 
 

 
console.log(arr);

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

Кстати, в отношении исходной формулировки вашего вопроса у вас нет «объекта JSON», потому что there is no such thing: у вас есть либо объект (в вашем конкретном случае массив объектов), либо JSON (as строка, которая должна быть проанализирована). То, что вы показываете в своем вопросе, недействительно JSON, потому что JSON требует двойных кавычек, а не кавычек, а имена свойств должны быть кавычками, но это действительный синтаксис литерала объекта JS.

Если ваши данные действительны, это JSON, строка , тогда вы сначала проанализируете ее, а затем обрабатываете полученный массив. (А если вы на самом деле нужно, как JSON после того, что вы повторно stringify результат.)

var json = /* your string here */ 
var arr = JSON.parse(json); 
// map here as above 
var updateJson = JSON.stringify(arr); 
+0

Вы обновляете 'arr'. Вероятно, было бы лучше просто назначить 'arr = arr.map (...)'. –

+0

@SumnerEvans - Хорошая точка. Я начал назначать результат новой переменной, а затем менял ее, чтобы перезаписать старый. Обновлено. – nnnnnn

+0

@nnnnnn: На самом деле, я обновил свой массив, клавиши также являются строками. Как это изменит этот код javascript? Спасибо!!! – newenthusiast

1

Предполагая, что вы разобраны ваш JSON в объект JavaScript под названием jsonData, вы можете просто перебирать массив и добавить как так:

var jsonData = ...; 

var filteredData = []; 

for (var i = 0; i < jsonData.length; i++) { 
    filteredData.push({ 
     address: jsonData[i].address, 
     latitude: jsonData[i].latitude, 
     longitude: jsonData[i].longitude, 
    }); 
} 
1

Используя обычный JavaScript:

var arr= 
[{address: '1300 BRYANT ST', 
    block: '3903', 
    cnn: '517000', 
    latitude: '37.7690871267671', 
    longitude: '-122.411527667132', 
    received: '2016-05-06', 
    x: '6009188.668', 
    y: '2108146.472' }]; 

var k=arr.map(function(v) { 
    return { 
     address: v.address, 
     latitude: v.latitude, 
     longitude: v.longitude 
    } 
}); 

Вот CodePen.