Удалить объект из массива, если значение пусто в паре имени и значения js - PullRequest
0 голосов
/ 08 октября 2018
[{name: "mode", value: "1"},{name: "group", value: ""},{name: "from_date", value: ""},{name: "to_date", value: "2018-10-16"},{name: "action", value: "ac_filter_transactions"}

Вот так выглядит мой массив.Я хочу удалить пару имя-значение из массива, если value пусто.

Я попробовал это решение: но это не сработало

formData.map((i) => {
  (i.value == "") ? delete i: "";
});

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

let obj = {"firstname": "XYZ", "lastname": "ABC"}

В чем разница между обоими объектами?

Ответы [ 3 ]

0 голосов
/ 08 октября 2018

Array.map вернет такое же количество элементов в новом массиве.Таким образом, вам нужно будет использовать Array.reduce.

formData.reduce((result, item) => {
  if (item.value) {
    result.push(item);
  }

  return result;
}, []);
0 голосов
/ 08 октября 2018

Для заголовка вашего вопроса я предполагаю, что «удалить» означает изменить массив (изменить его фактическое содержимое).Если это так, вы можете сделать это так:

const copy = arr.slice(); // copy of array for iterating without getting the index (`i`) wrong
let count = 0;
copy.forEach((val, i) => { if (!val.value) arr.splice(i - count++, 1); });
                      // maybe `val.value != ""` instead of `!val.value` ?

Демо:

var arr = [{name: "mode",value: "1"}, {name: "group", value: ""}, {name: "from_date",value: ""}, {name: "to_date", value: "2018-10-16"}, {name: "action",value:"ac_filter_transactions"}];

const copy = arr.slice();
let count = 0;
copy.forEach((val, i) => { if (!val.value) arr.splice(i - count++, 1); });
console.log(arr); // print original array, not a copy

Или, если вы не хотите изменять массив (не изменяйте его фактическое содержимое), вы можете просто сделать (отфильтрованную) копию этого следующим образом:

const copy = arr.filter(val => !!val.value)

Демонстрация:

var arr = [{name: "mode",value: "1"}, {name: "group", value: ""}, {name: "from_date",value: ""}, {name: "to_date", value: "2018-10-16"}, {name: "action",value:"ac_filter_transactions"}];

console.log(arr.filter(val => !!val.value)); // print a copy, not the original array
0 голосов
/ 08 октября 2018

Вы можете использовать Array.prototype.filter и возвращать записи, основываясь на логическом значении того, существует или нет value, поскольку пустая строка ложна.

a.filter(o => (o.value));

let a = [{name: "mode", value: "1"},{name: "group", value: ""},{name: "from_date", value: ""},{name: "to_date", value: "2018-10-16"},{name: "action", value: "ac_filter_transactions"}];


let result = a.filter(o => (o.value));

console.log(result);

Примечание : Если любое из ваших свойств value также ложно, оно также не будет обнаружено.Чтобы обойти это, вы можете просто переписать его, используя: (o.value !== "")

let a = [{name: "mode", value: "1"},{name: "group", value: ""},{name: "from_date", value: ""},{name: "to_date", value: "2018-10-16"},{name: "action", value: "ac_filter_transactions"}];


let result = a.filter(o => (o.value !== ""));

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