JavaScript извлекает определенные свойства из всех объектов в массиве - PullRequest
0 голосов
/ 03 сентября 2018

У меня есть массив объектов с одинаковыми свойствами. Каждый объект имеет около ста свойств. Я хочу сохранить только несколько из них в новом массиве:

var dummyArray = [{ "att1": "something", "att2": "something", ..., "att100": "something"}, { "att1": "something", "att2": "something", ..., "att100": "something"}, ...];

Как я могу фильтровать / отображать / уменьшать ... и извлекать интересные ключи?

const newDummArray = dummyArray.map(function(item) { 
    delete item.att1; 
    delete item.att3; 
    delete item.att15;
    // ... (long list)
    return item; 
});

как мне сохранить только att20, att30, att70, att80 для каждого объекта и удалить остальные?

Ответы [ 4 ]

0 голосов
/ 19 февраля 2019

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

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

Если у вас есть список объектов. Отобразите карту в списке и извлекайте данные на каждой итерации.

function objectExtract(obj, properties) {
    return properties.reduce((result, prop) => {
        if (obj.hasOwnProperty(prop)) {
            result[prop] = obj[prop];
        }
        return result;
    }, {});
}

Читать о уменьшить здесь https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/Reduce.

использование:

(реальный пример с редуксом)

store.dispatch(
            setRooms({ 
                ...roomsState,
                list: rooms.reduce((list, room) => {
                    list[room.id] = objectExtract(room, ['name', 'description', 'createdAt', 'updatedAt']);
                    return list;
                }, {})
            })
        )

(на примере вопроса)

var dataSourceArray = [{
  "att1": "something",
  "att2": "something",
  "att20": "something",
  "att100": "something"
}, {
  "att1": "something",
  "att2": "something",
  "att20": "something",

  "att100": "something"
}];

let x = dataSourceArray.map((item) => {
  return objectExtrac(item, ['att100', 'att2']);
});
0 голосов
/ 03 сентября 2018

map создает новый массив, поэтому нет необходимости удалять что-либо, вместо этого создайте массив интересных ключей и верните его

var dummyArray = [{
  "att1": "something",
  "att2": "something",
  "att20": "something",
  "att100": "something"
}, {
  "att1": "something",
  "att2": "something",
  "att20": "something",

  "att100": "something"
}];

let x = dummyArray.map((item) => {
  return {
    attr20: item.att20
  }

})

console.log(x)
0 голосов
/ 03 сентября 2018

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

var dummyArray = [{ "att1": "something", "att2": "something", "att100": "something"}, { "att1": "something", "att2": "something", "att100": "something"}];

var propsToKeep = ["att1", "att100"];

var result = dummyArray.map(item => {
  const obj = {};
  for (const prop of propsToKeep) {
    obj[prop] = item[prop];
  }
  return obj;
})

console.log(result)
0 голосов
/ 03 сентября 2018

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

const dummyArray = [{ "att20": "att20", "att30": "att30", "att70": "att70", "att80": "att80"}, { "att20": "att20", "att30": "att30", "att70": "att70", "att80": "att80"}];

const result = dummyArray.map(({ att20, att30, att70, att80 }) => ({
  att20, 
  att30, 
  att70, 
  att80
}));

console.log(result);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...