Javascript проверяет, существует ли какое-либо из значений в массиве объектов [duplicate]

Указатель NULL - это тот, который указывает на никуда. Когда вы разыскиваете указатель p, вы говорите «дайте мне данные в месте, хранящемся в« p ». Когда p является нулевым указателем, местоположение, хранящееся в p, является nowhere, вы говорите «Дайте мне данные в месте« нигде ». Очевидно, он не может этого сделать, поэтому он выбрасывает NULL pointer exception.

В общем, это потому, что что-то не было правильно инициализировано.

-3
задан bokzor 27 October 2015 в 01:38
поделиться

5 ответов

Сопоставьте элементы в array2 с свойством label элемента в array1 с соответствующим value:

array2                      // Take array2 and
  .map(                     // map
    function(n) {           // each element n in it to
      return array1         // the result of taking array1
        .find(              // and finding
          function(e) {     // elements
            return          // for which 
              e.value       // the value property
              ===           // is the same as 
              n;            // the element from array2
          }
        )
        .label              // and taking the label property of that elt
      ;
    }
  )
;

Без комментариев и в ES6:

array.map(n => array1.find(e => e.value === n).label);
2
ответ дан user 18 August 2018 в 11:40
поделиться

Для этого достаточно простого для цикла . В будущем вы должны серьезно опубликовать код, чтобы показать, что вы пробовали.

var array1=[{value:1, label:'value1'},{value:2, label:'value2'}, {value:3, label:'value3'}];
var array2=[1,3];
var result = [];

for (var i = 0; i < array2.length; i++){
  result.push(array1[array2[i]-1].label);
}
console.log(result); //["value1", "value3"]

JSBIN

0
ответ дан 1252748 18 August 2018 в 11:40
поделиться

Вы можете использовать .filter и .map , как это

var array1 = [
    {value:1, label:'value1'},{value:2, label:'value2'}, {value:3, label:'value3'}
];

var array2 = [1, 3];

var arrayResult = array1.filter(function (el) {
  return array2.indexOf(el.value) >= 0;
}).map(function (el) {
  return el.label;
});

console.log(arrayResult);

1
ответ дан Alexander T. 18 August 2018 в 11:40
поделиться

Просто проиндексируйте первый массив с помощью функции _.indexBy:

var indexedArray1 = _.indexBy(array1, "value");
_.map(array2, function(x) { return indexedArray1[x].label; });
0
ответ дан Lukáš Havrlant 18 August 2018 в 11:40
поделиться

Хорошие ответы на все. Если я могу предложить еще одну альтернативу, используя Map, поскольку это, похоже, подходит для решения пары ключей: значение.

var arr1 = [ {value:1, label:'value1'}, {value:2, label:'value2'}, {value:3, label:'value3'} ];
var arr2 = [1, 3];

// create a Map of the first array making value the key.
var map = new Map( arr1.map ( a => [a.value, a.label] ) );

// map second array with the values of the matching keys
var result = arr2.map( n => map.get ( n ) );

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

var arr1 = [[1,'value1'], [2,'value2'], [3,'value3']]; // no need for names
var arr2 = [1, 3];

var map = new Map( arr1 ); // no need to arr1.map ;
var result = arr2.map( n => map.get ( n ) );
0
ответ дан Mogsdad 18 August 2018 в 11:40
поделиться
Другие вопросы по тегам:

Похожие вопросы: