Как исключить нулевое значение в объекте, используя каждый метод в JavaScript - PullRequest
0 голосов
/ 30 августа 2018

У меня есть объект json, который по умолчанию имеет 12 объектов, пользователь может добавить значение к объекту. Если пользователь добавляет значение только для 2 объектов и когда я пытался использовать every (), он возвращает false, даже если условие, которое я установил как true из-за пустых значений в объекте.

Я хотел бы знать, как исключить объект, который имеет пустое значение.

vm.schemeApply.documents.filter(function(doc) {
  $log.log("base64", base64MimeType(doc.url));
  if (doc.url && doc.url.length > 0) {
    return (
      base64MimeType(doc.url) === ".png" ||
      base64MimeType(doc.url) === ".pdf" ||
      base64MimeType(doc.url) === ".jpeg"
    );
  }
});

Пример массива:

[
  {name: "Test1", url: "AADDfdfdfdfdfdfdfdfdf"},
  {name: "Test2", url: "AADDfdfdfdfdfdfdfdfdf"},
  {name: "Test3", url: ""},
  {name: "Test4", url: ""},
  {name: "Test5", url: ""},
  {name: "Test6", url: ""},
  {name: "Test7", url: ""},
  {name: "Test8", url: ""},
  {name: "Test9", url: ""},
  {name: "Test10", url: ""} 
]

Ответы [ 3 ]

0 голосов
/ 30 августа 2018

Вы можете использовать filter () приведение значения от url к true или false с использованием !! как newArr = arr.filter(o=>(!!o.url)): или просто:

const arr = [
    {name: "Test1", url: "AADDfdfdfdfdfdfdfdfdf"},
    {name: "Test2", url: "AADDfdfdfdfdfdfdfdfdf"},
    {name: "Test3", url: ""},
    {name: "Test4", url: ""},
    {name: "Test5", url: ""},
    {name: "Test6", url: ""},
    {name: "Test7", url: ""},
    {name: "Test8", url: ""},
    {name: "Test9", url: ""},
    {name: "Test10", url: ""} 
  ]


  newArr = arr.filter(o=>(o.url))

  console.log(newArr)

every () бесполезен для вас в этой ситуации, я думаю, потому что возвращает true (или false), будь:

все элементы в массиве проходят тест, реализованный предоставленная функция.

0 голосов
/ 30 августа 2018

Похоже, вы возвращаетесь не в то место. Ваш оператор if получает возврат, но вы никогда ничего не возвращаете методу filter. Чуть более краткий пример:

const docs = [
  {name: "Test1", url: "123"},
  {name: "Test2", url: "124"},
  {name: "Test3", url: ""},
  {name: "Test4", url: ""},
  {name: "Test5", url: ""},
  {name: "Test6", url: ""},
  {name: "Test7", url: ""},
  {name: "Test8", url: ""},
  {name: "Test9", url: ""},
  {name: "Test10", url: ""} 
]

const result = docs.filter(function(doc) {
  return !!doc.url && (
      doc.url === '123' ||
      doc.url === '124'
    )
});

console.log(result)

Или, если вы предпочитаете использовать оператор if, вы также можете написать его как:

 const result = docs.filter(function(doc) {
  const hasDoc = !!doc.url
  let result
  if (hasDoc) { result = 
      doc.url === '123' ||
      doc.url === '124'
  }
  return result
})
0 голосов
/ 30 августа 2018

это может быть не лучшим решением, но:

var returnValue = false;
vm.schemeApply.documents.filter(function(doc) {
     $log.log("base64", base64MimeType(doc.url));
     if (doc.url && doc.url.length > 0) {
       let condition = ((base64MimeType(doc.url) === ".png") || (base64MimeType(doc.url) === ".pdf") || (base64MimeType(doc.url) === ".jpeg"));
       if(condition) {
          returnValue = true;
       }
       return condition;
     }
     return returnValue;
  });

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

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