Я пытаюсь создать массив, который обобщает другой массив. Я уже получил некоторые действительно хорошие идеи here, все они работают, но все они создают еще одно препятствие, которое я, опять же, не могу решить.Удаление пустых ключей объектов в массиве объектов
на основе @ kooiinc-х answer, мой текущий код выглядит следующим образом:
var grants = [
{ id: "p_1", location: "loc_1", type: "A", funds: "5000" },
{ id: "p_2", location: "loc_2", type: "B", funds: "2000" },
{ id: "p_3", location: "loc_3", type: "C", funds: "500" },
{ id: "p_2", location: "_ibid", type: "D", funds: "1000" },
{ id: "p_2", location: "_ibid", type: "E", funds: "3000" }
];
var projects = [];
grants.map(
function (v) {
if (!(v.id in this)) {
this[v.id] = v;
projects.push(v);
} else {
var current = this[v.id];
current.type = [v.type].concat(current.type);
current.funds = [v.funds].concat(current.funds);
}
}, {});
... который дает следующий желаемый результат (type
и funds
вступили в подмассивы, остальные выталкиваются без изменений):
[
{ "id": "p_1", "location": "loc_1", "type": "A", "funds": "5000" },
{ "id": "p_2", "location": "loc_2", "type": ["E","D","B"], "funds": ["3000","1000","2000"] },
{ "id": "p_3", "location": "loc_3", "type": "C", "funds": "500" }
]
Однако, если некоторые объекты имеют некоторые неопределенные значения ключа, результат будет иметь нулевые значения в массивах. Например, как это (смотреть на type
массив):
[
{ "id": "p_1", "location": "loc_1", "type": "A", "funds": "5000" },
{ "id": "p_2", "location": "loc_2", "type": ["E",null,null], "funds": ["3000","1000","2000"] },
{ "id": "p_3", "location": "loc_3", "type": "C", "funds": "500" }
]
(Вот fiddle с одного и того же.)
Я попытался найти быстрый способ удалить их впоследствии (например, here или here), но по какой-то причине ни один из обычных методов (рекурсивного удаления всех ключей, которые не определены/null), похоже, работает независимо от того, где я помещаю их в свой код. Они не дают ошибок, они просто ничего не удаляют.
Возможно ли уже как-то исключить неопределенные ключи в сопоставлении?
Update: Таким образом, некоторые из ключей объектов не будут иметь какое-либо значения, просто [null,null,null]
в то время как другие будут иметь несколько, но не все, как ["E",null,null]
. Идея состоит в том, чтобы удалить все нулевые элементы, и если ничего не осталось, удалите также ключ объекта.
Да, я думал об этом тоже, но это не похоже, чтобы удалить все нули, смотрите здесь: http://jsfiddle.net/eebgasw6/1/ – tmr
Я вижу, есть довольно простое решение. См. Отредактированный ответ – KooiInc