#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;