#javascript #lodash
#javascript #Lodash
Вопрос:
PC = {a:{ID: "abc",options:{x1:"100", x2:"200"}},b:{ID: "d",options:{x2:"100", x3:"200"}}}
pro = {
"pro": [
{
"pID": "abc",
"attributes": {
"xyz": [
"1",
"2",
"3"
],
"foo": "フルプレミアム"
}
}
]
}
functionX() {
let isND = true;
if (pro === null || pro === [] || pro.length === 0) {
return isND;
} else if (pro.length > 0) {
some(PC, (p) => {
some(p.options, (o, k) => {
some(pro, (item) => {
if (p.ID === item.pID amp;amp; k === 'xyz') {
if (item.attributes[k] !== []) {
isND = false;
}
} else if (p.ID === item.pID amp;amp; k !== 'xyz') {
if (item.attributes[k] !== '') {
isND = false;
}
}
});
});
});
}
return isND;
}
Мне приходится перебирать 3 разные коллекции, чтобы проверить мое состояние и вернуть значение. Я пытаюсь выйти из вложенного some или сопоставить, если удовлетворяет одно из моих условий if-else. Я пытался передать return true после isND = false, но не работает. Может кто-нибудь помочь решить эту проблему.
Комментарии:
1. Вы думали об использовании ключевого слова ‘break’?
2. Что такое
some()
?PC
также не представляется допустимым JS-массивом. Пожалуйста, поделитесь своим фактическим кодом и структурами данных3. я исправил компьютер. это объект, который содержит пары ключ-значение. где значениями являются объекты @phil
4. Даже после вашего обновления
PC
по-прежнему недопустимо.options
Должны ли ваши файлы быть массивами или объектами?5. параметры — это объекты
Ответ №1:
Array.prototype.some()
завершится досрочно, если какой-либо из обратных вызовов вернется, true
чтобы вы могли return
получить результат таким образом.
Это не очень понятно, но, похоже, вы хотите использовать эту функцию «раннего выхода» при возврате обратного. Как насчет чего-то подобного?..
// ignoring "if (pro === null || pro === [] || pro.length === 0)" for this example
// return the inverse
return !Object.values(PC).some(({ ID, options }) => {
return Object.entries(options).some(([k, o]) => {
// here "k" is one of your "x1", "x2", etc keys
// and "o" is the corresponding value
return pro.pro.some(item => {
// return "true" if any of your "conditions" are met
})
})
})
Ответ №2:
return Object.values(PC).some(({ ID, options }) => {
return Object.entries(options).some(([k]) => {
return (pro.pro).some((item) => {
if (condition) {
if (condition) {
return false;
}
return true;
} else if (condition) {
if (condition) {
return false;
}
return true;
}
return null;
});
});
});
// Не вернули обратную функцию outer