Как искать в сложном объекте массива javaScript - PullRequest
0 голосов
/ 25 апреля 2018

Я немного смущен.У меня есть следующий код в директиве:

NavTabsDirective.prototype.addPane = function (pane) {
        if (!_.isObject(pane) || "Pane" !== pane.constructor.name) {
            throw new TypeError("pane must be an instance of Pane");
        }

        if (_.isUndefined(this.FirstPane)) {
            this.FirstPane = pane;
        }
        
        this.Panes[pane.name] = pane;
    };

когда я смотрю в отладчике на массив this.Panes, я вижу что-то вроде:

this.Panes[name1] = paneObject -- with properties
this.Panes[name2] = paneObject -- with its properties

Я хочу понять, как искать этомассив.Скажем, это мой код:

let invalid = (_.findIndex(this.Panes, { 'isValid': false })>=0);

, который я закомментировал, так как не смог найти панель, где isValid имеет значение false, хотя я вижу такую ​​панель в этом массиве.

Итак, мойпутаница возникает из-за того, что объект массива Panes имеет имена для доступа к каждому объекту панели, и поэтому я не знаю, как правильно его искать.Как бы я проверил на наличие недействительных среди панелей?

Ответы [ 3 ]

0 голосов
/ 25 апреля 2018

var Panes = ["Hello","World"];
var PanesLength = Panes.length;
for (var i = 0; i < PanesLength; i++) {
    if(Panes[i] == "Hello"){
      alert(Panes[i]);
    }
}
0 голосов
/ 25 апреля 2018

Если pane.name - это число, в котором панели в this.panes не являются массивом, это объект, вы можете использовать его ключи и уменьшить его до значения:

const result = Object.keys(this.Panes).reduce(
  (all,key)=>all && this.Panes[key].isValid,
  true
)
0 голосов
/ 25 апреля 2018

Разобрался с решением после проверки нескольких потоков здесь:

for (let pane in this.Panes) {
                if (this.Panes[pane].isValid === false) {
                    invalid = true;
                    break;
                }
            }

Хорошо работает.

...