Javascript сравнивает индекс со значением массива

#javascript

#javascript

Вопрос:

У меня есть основной массив и объект, который содержит массив элементов. Я хочу посмотреть, соответствует ли объект, содержащий элементы, основному индексу массива. Если совпадение, то напишите в консоль.

 var mainItems = [0,1,2,3,4,5,6,7,8,9,10,"car", "boat", "truck", "plane"];
var nonStandardItems =
{
    "items": [
        {

            "value": "8",
            "code": "8ic"
        },
        {
            "value": "boat",
            "code": "10bt"
        }
    ],

}

if( nonStandardItems.items.slice(-1)[0].value == mainItems.indexOf(nonStandardItems.items.slice(-1)[0].value)  ){
    console.log("you are right");
}
  

Однако я получаю только значение -1 и ошибку. Чего мне не хватает?

РЕДАКТИРОВАТЬ Я извлекаю данные из разных источников данных, все из которых содержат ненужные данные. Однако последний элемент в массиве нежелательных данных — это тот элемент, который мне нужен.

Я хочу проверить, соответствуют ли результаты моего запроса api «ожидаемому» или «стандартному» набору данных. Например, мой объект nonStandardItems является примером того, что я получаю от api.

Я хочу проанализировать его и проверить, имеет ли ПОСЛЕДНИЙ элемент в массиве items значение, соответствующее индексу моего стандартного массива items. Мой массив нежелательных элементов содержит числовые и текстовые данные, но последний элемент всегда будет иметь либо числовой, либо текстовый код, который я ожидаю.

Пример был надуманным и поспешным, поэтому я прошу прощения за орфографические, синтаксические и объяснительные ошибки. Ошибка, с которой столкнулась консоль, заключалась в том, что nonstandardItems.items[-1].value не существует.

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

1. Я действительно не понимаю, что вы пытаетесь сделать. Можете ли вы описать это лучше?

2. Звучит так, как вы хотите ….value == indexOf(….code) , а не .value дважды

3. Какую ошибку вы получаете?

4. Это mainItems.indexOf не mainItemsindexOf

5. когда вы используете indexOf, это возвращает -1, если значение не существует в массиве, в вашем случае вы говорите, что если mainItem содержит «14», это возвращает -1, и очевидно, что это не нормально. Теперь вы можете использовать mainItems.includes(«14»), а не indexOf это возвращает true или false и не требует сравнения

Ответ №1:

Используйте filter():

 if (nonStandardItems.items.filter(v => mainItems.indexOf(v.code) == v.value).length > 0) {
    console.log("you are right")
}