2017-02-01 6 views
0

Учитывая следующееПроверить массив объектов в lodash для значения свойства

var content = [{ 
     "set_archived": false, 
     "something": [{ 
      "id": "aa7bb3db-19a2-4ef6-5944-892edaaf53c3", 
      "modified": "2016-12-01T18:23:29.743333Z", 
      "created": "2016-12-01T18:23:29.743333Z", 
      "archived": false 
     }] 
    }, 
    { 
     "set_archived": true, 
     "something": [{ 
      "id": "aa7bb3db-19a2-4ef6-5944-892edaaf53c3", 
      "modified": "2017-01-30T19:42:29.743333Z", 
      "created": "2017-01-30T19:42:29.743333Z", 
      "archived": false 
     }] 
    } 
]; 

Использование Lodash, как бы я определить, если либо set_archived или something.archived в массиве объектов, равно правда?

Таким образом, в этом случае, поскольку второй объект имеет значение set_is_archived, то это ожидаемый ответ должен быть правдой. Если все объекты являются ложными в любом объекте, тогда ответ должен быть ложным.

+0

Есть ли причина, по которой вы должны использовать lodash? Существует много [способов сделать это в обычном старом JavaScript] (http://stackoverflow.com/q/8217419/215552) –

+1

Возможный дубликат [Can \ _lodash проверить массив, чтобы проверить, имеет ли элемент массива поле с определенное значение?] (http://stackoverflow.com/questions/21278661/can-lodash-test-an-array-to-check-if-an-array-element-has-a-field-with-a- certai) –

+0

'content.some (c => (c.set_archived || c.something.some (s => s.archived)))' – Andreas

ответ

1

Просто используйте:

_.filter(content, o => o["set_archived"] || o.something[0].archived).length > 0; 

или

_.some(content, o => o["set_archived"] || o.something[0].archived); 

PlainJs:

content.some(o => o["set_archived"] || o.something[0].archived) 

или

content.filter(o => o["set_archived"] || o.something[0].archived).length > 0; 
1

Yo u может просто использовать some() в простом javascript.

var content = [{ 
 
    "set_archived": false, 
 
    "something": [{ 
 
    "id": "aa7bb3db-19a2-4ef6-5944-892edaaf53c3", 
 
    "modified": "2016-12-01T18:23:29.743333Z", 
 
    "created": "2016-12-01T18:23:29.743333Z", 
 
    "archived": false 
 
    }] 
 
}, { 
 
    "set_archived": true, 
 
    "something": [{ 
 
    "id": "aa7bb3db-19a2-4ef6-5944-892edaaf53c3", 
 
    "modified": "2017-01-30T19:42:29.743333Z", 
 
    "created": "2017-01-30T19:42:29.743333Z", 
 
    "archived": false 
 
    }] 
 
}]; 
 

 
var result = content.some(function(e) { 
 
    return e.set_archived === true || e.something[0].archived === true 
 
}) 
 
console.log(result)

0

Вам не нужно lodash для этого. Вы можете сделать это с чистым JS, используя filter:

content.filter(i => i.set_archived || i.something.archied) 
0

Учитывая тот же объект, что и один в вопросе, есть несколько способов, чтобы найти решение вашей проблемы мат.

var flag = false; 
flag = content.some(function(c){ 
    if(c["set_archived"]){ 
    return true; 
    } 
}); 

console.log(flag) 

или

var flag = false; 
    flag = content.some(function(c){ 
     if(c["set_archived"] || c.something[0].archived){ 
     return true; 
     } 
    }); 

    console.log(flag) 

выше фрагмент кода приведет к истинно, если по крайней мере один из объекта массива есть [ «set_archived»] свойству верно, и это будет возвращать ложь, если все объекты массива имеет ["set_archived"] как false. (Я мог бы сказать наоборот)

Метод some() проверяет, прошел ли какой-либо элемент в массиве тест, реализованный предоставленной функцией.

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

Если вы ищете более строгий способ, я с удовольствием перехожу к каждому().