Разорвать Nested Some или карту JavaScript - PullRequest
0 голосов
/ 12 марта 2019
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 && k === 'xyz') {
                        if (item.attributes[k] !== []) {
                            isND = false;
                        }
                    } else if (p.ID === item.pID && k !== 'xyz') {
                        if (item.attributes[k] !== '') {
                            isND = false;
                        }
                    }
                    });
                });
            });
        }
        return isND;
    }

Мне нужно перебрать 3 разных коллекции, чтобы проверить мое состояние и вернуть значение.Я пытаюсь выйти из вложенного объекта some или map, если выполняется одно из моих условий if-else.Я попытался передать return true после isND = false, но не работает.Может кто-нибудь помочь решить эту проблему.

Ответы [ 2 ]

1 голос
/ 12 марта 2019

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
    })
  })
})
0 голосов
/ 13 марта 2019
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;
                    });
                });
            });

// Не вернул инверсию внешней функции

...