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

#javascript #lodash

#язык JavaScript #lodash

Вопрос:

Мне нужно получить логическое значение из массива массива и объекта, как показано ниже

 points = [  [1,2,3,4],  {a:1, b:2} ]  

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

 let newVal = [1,2,3,4] or sometimes  let newVal = {a: 2, b: 5} etc  

И мне нужно проверить, присутствует ли он внутри points или нет, и протолкнуть его внутрь, если он отсутствует.

 if(!_.some(points, val =gt; _.isEqual(val,newVal))){  points.push(newVal)  } else return;  

ожидаемый результат
если newVal присутствует внутри points , то я должен получить true еще false

Но вышесказанное _some всегда возвращает true, если newVal это массив.

Кто-нибудь может мне в этом помочь.

Комментарии:

1. пожалуйста, добавьте желаемый результат.

2. @NinaScholz, пожалуйста, взгляните

3. Попробуй points.some(val =gt; _.isEqual(val,newVal)) вместо _.some(points, val =gt; _.isEqual(val,newVal)) этого . Встроенный some должен делать то, что вам нужно.

4. @user2740650 да, это работает

Ответ №1:

Если вы полагаетесь на isEqual from lodash для определения равенства, вы можете использовать это:

 points.some(val =gt; isEqual(val, newVal))  

Пример фрагмента ниже:

 lt;script type="module"gt;  import {isEqual} from 'https://cdn.jsdelivr.net/npm/lodash-es@4.17.21/lodash.min.js';  // returns `true` if value was added, `false` otherwise function addNewValueIfNotEqual (arr, value) {  if (arr.some(v =gt; isEqual(v, value))) return false;  arr.push(value);  return true; }  const points = [  [1,2,3,4],  {a:1, b:2}, ];  const newValues = [  [1, 2, 3, 4],  {a: 2, b: 5}, ];  for (const value of newValues) {  const valueAdded = addNewValueIfNotEqual(points, value);  console.log({value, valueAdded}); }  console.log(points);  lt;/scriptgt;