How to apply search to an array of arrays of strings?

Viewed 104

In my case, the search should go through the first [1] elements of nested arrays. I added a loop through the array elements from the answer, but I can't add the found arrays to the array.

function massivs() {
        let array = [['a', 'mango', 'b','c'], ['d', 'applemango', 'e','f'],['k', 'mangoapple', 's','r']];
        let comp = ['apple', 'mango'];
        let ans = [];
        
        for (let i = 0; i < array.length; i++) {        
            for (el of array[i]) {
                if (comp.every(y => el.includes(y))) {
                    ans.push(el);
                }
            }
        }
        console.log(ans);
}

massivs();

[ 'applemango', 'mangoapple' ]


Expected Result [['d', 'applemango', 'e','f'],['k', 'mangoapple', 's','r']]
4 Answers

You could do it with just one line of code:

const array = [['a', 'mango', 'b','c'], ['d', 'applemango', 'e','f'],['k', 'mangoapple', 's','r']];
const comp = ['apple', 'mango'];

const result = array.filter(x => comp.every(y => x.some(z => z.includes(y))));

console.log(result);

Replace:

ans.push(el)

With:

ans.push(array[i])

for of iterates the items of your array, so it's only pushing the element of the array that is included in your search values, push the whole array if found in search and break the loop

 function massivs() {
            let array = [['a', 'mango', 'b','c'], ['d', 'applemango', 'e','f'],['k', 'mangoapple', 's','r']];
            let comp = ['apple', 'mango'];
            let ans = [];
            
            for (let i = 0; i < array.length; i++) {        
                for (el of array[i]) {
                    if (comp.every(y => el.includes(y))) {
                        ans.push(array[i]);
                        break;
                    }
                }
            }
            console.log(ans);
    }

    massivs();

you are pushing the elements of the inner arrays to the answer, hence you only get the elements, if you want the parent array added then you have to push that

for (sub of array) {
    for (el of sub) {
        if (comp.every(y => el.includes(y))) {
            ans.push(sub);
        }
    }
}
Related