Как исключить пустые значения и ключи в массиве с помощью jquery? - PullRequest
0 голосов
/ 14 мая 2019

У меня есть массив;

[
  {pre_ref_fullname: "", pre_ref_position: "", pre_ref_phone: ""},
  {pre_ref_fullname: "", pre_ref_position: "", pre_ref_phone: ""},
  {pre_ref_fullname: "", pre_ref_position: "", pre_ref_phone: ""}
]

Итак, я хочу удалить элементы, если значения пустые.Если пользователь добавил 2 справочные данные, я хочу получить эти данные следующим образом:

[
{pre_ref_fullname: "Name", pre_ref_position: "Job", pre_ref_phone: "Number"},
{pre_ref_fullname: "Name2", pre_ref_position: "Job2", pre_ref_phone: "Number2"}
]

Я использовал некоторые методы, но не работал.Это последняя попытка с помощью Reduce и $ prerefData с этим массивом;

var arr = $prerefData.reduce((result, item) => {
    if (item.value != "") {
       result.push(item);
    }
    return result;
    }, []);
console.log(arr);

Ответы [ 5 ]

2 голосов
/ 14 мая 2019

Вы можете использовать Метод фильтра Javascript Array

Коротко Array.filter будет зацикливать ваш массив и запускать обратный вызов для каждого элемента:

  • Есливозвращается true : элемент включен в result
  • Если возвращается false : элемент отфильтрован

let data = [
  {pre_ref_fullname: "", pre_ref_position: "", pre_ref_phone: ""},
  {pre_ref_fullname: "", pre_ref_position: "", pre_ref_phone: ""},
  {pre_ref_fullname: "", pre_ref_position: "", pre_ref_phone: ""},
  {pre_ref_fullname: "Name", pre_ref_position: "Job", pre_ref_phone: "Number"},
  {pre_ref_fullname: "Name2", pre_ref_position: "Job2", pre_ref_phone: "Number2"}
];

let result = data.filter(function (item) {
  for(key in item) {
    if (item[key]) {
      // Means one of the object keys have values, include it in the result
      return true
    }
  }
})

console.log(result)
1 голос
/ 14 мая 2019

попробуй

data.filter(x=> Object.values(x).join(''));

let data = [
  {pre_ref_fullname: "", pre_ref_position: "", pre_ref_phone: ""},
  {pre_ref_fullname: "", pre_ref_position: "", pre_ref_phone: ""},
  {pre_ref_fullname: "", pre_ref_position: "", pre_ref_phone: ""},
  {pre_ref_fullname: "Name", pre_ref_position: "Job", pre_ref_phone: "Number"},
  {pre_ref_fullname: "Name2", pre_ref_position: "Job2", pre_ref_phone: "Number2"}
];

let r = data.filter(x=> Object.values(x).join(''));

console.log(r);
1 голос
/ 14 мая 2019

Вы можете использовать filter, использовать Object.values для извлечения всех значений отдельных объектов. Используйте every, чтобы проверить, не являются ли все значения массива пустыми строками.

let data = [{"pre_ref_fullname":"","pre_ref_position":"","pre_ref_phone":""},{"pre_ref_fullname":"","pre_ref_position":"","pre_ref_phone":""},{"pre_ref_fullname":"","pre_ref_position":"","pre_ref_phone":""},{"pre_ref_fullname":"Name","pre_ref_position":"Job","pre_ref_phone":"Number"},{"pre_ref_fullname":"Name2","pre_ref_position":"Job2","pre_ref_phone":"Number2"}];

let result = data.filter(o => Object.values(o).every(e => e.trim() !== ""));

console.log(result);

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

let data = [{"pre_ref_fullname":"","pre_ref_position":"","pre_ref_phone":""},{"pre_ref_fullname":"","pre_ref_position":"not Empty","pre_ref_phone":""},{"pre_ref_fullname":"","pre_ref_position":"","pre_ref_phone":""},{"pre_ref_fullname":"Name","pre_ref_position":"Job","pre_ref_phone":"Number"},{"pre_ref_fullname":"Name2","pre_ref_position":"Job2","pre_ref_phone":"Number2"}]

let result = data.filter(o => Object.values(o).some(e => e.trim() !== ""));

console.log(result);
0 голосов
/ 14 мая 2019

Используйте filter с Object.values и every и используйте trim, чтобы убедиться, что он исключает пробелы:

const data = [{pre_ref_fullname:"",pre_ref_position:"",pre_ref_phone:""},{pre_ref_fullname:"",pre_ref_position:"",pre_ref_phone:""},{pre_ref_fullname:"",pre_ref_position:"",pre_ref_phone:""},{pre_ref_fullname:"Name",pre_ref_position:"Job",pre_ref_phone:"Number"},{pre_ref_fullname:"Name2",pre_ref_position:"Job2",pre_ref_phone:"Number2"}];

const res = data.filter(e => Object.values(e).every(s => s.trim != ""));

console.log(res);
.as-console-wrapper { max-height: 100% !important; top: auto; }
0 голосов
/ 14 мая 2019

Вы должны использовать метод фильтра:

let filtredArr = arr.filter(ele => ele.pre_ref_fullname && ele.pre_ref_position && ele.pre_ref_phone)

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

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