Метод find в массиве

Подскажите, пожалуйста, как корректно написать callback?
Нужно определить, есть ли в двумерном массиве элемент:

var test = [[1, 3], [1, 4]];
console.log(test.find((item, value) => {
    if (item[0] === value || item[1] === value)) {
        return true;
    } else {
        return false;
    }
}), 1);

Пробую так:

var test = [[1, 3], [1, 4]];
var element = 2;

var result = test.find((item) => {
    if (item[0] === element || item[1] === element) {
        return true;
    } else {
        return false;
    }
});

console.log(result);

Но булеан почему-то не выводит

.find возвращает найденный элемент. Если хочешь булевый результат, нужно приводить типы. !! - превращает значение в булевый эквивалент.

есть ли в двумерном массиве элемент

Если я верно понял, это проверка на то что вложенный массив не пуст. Тогда код следующий:

var test = [[1, 3], [1, 4]]
var test2 = [[], []]

var result = !!test.find((item) => {
    return Array.isArray(item) && item.length
});
var res2 = !!test2.find((item) => {
    return Array.isArray(item) && item.length
})

console.log(result, res2)

В примере как пустые так и заполненные вложенные массивы.

1 лайк

Только понял что мое решение не 100% решает задачу как она поставлена. Но думаю информации достаточно чтобы продолжить решать твою задачу. Подтверди если это так.

Нужно определить, находиться ли такой элемент в двумерном массиве, или нет его.

Идиоматическое решение

function containsInNested(arr, value) {
	return arr.some(function (nestedArr) {
		return nestedArr.indexOf(value) !== -1
	})
}

containsInNested([[], [1, 2], [3, 4]], 3) // true
containsInNested([[], [1, 2], [3, 4]], 5) // false
1 лайк

Задача у меня такова: есть вершины, нужно добавлять пути, но чтобы не было циклов. Вершины я записываю в массив [[1, 2], [1,3]]

pushRoads(a, b) {
        if (!this.containsInNested(this.roads, a) || this.containsInNested(this.roads, b)) {
            this.roads.push[a, b];
        }
}

Из описания не понятно что надо сделать и какие есть ограничения. Сформулируй задачу “что надо сделать, что ты делаешь, что ожидаешь увидеть, что видишь”.

1 лайк
class Query {
    constructor(n, m, cLib, cRoad) {
        this.n = n;
        this.m = m;
        this.cLib = cLib;
        this.cRoad = cRoad;
        this.roads = [];
    }

    pushRoads(a, b) {
        if (!this.containsInNested(this.roads, a) || this.containsInNested(this.roads, b)) {
            this.roads.push([a, b]);
        }
    }

    containsInNested(arr, value) {
        return arr.some(function (nestedArr) {
            return nestedArr.indexOf(value) !== -1
        })
    }
}

В объект записываются пути, например [[1, 2], [1,3], [2,4], [3, 4]]. Лишние (которые образуют циклы) записывать в свойство roads не нужно ( они не нужны).
[3, 4] образует цикл.

Все. Работает.