Alex
Alex

Reputation: 101

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

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']]

Upvotes: 3

Views: 194

Answers (4)

Guerric P
Guerric P

Reputation: 31805

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);

Upvotes: 2

NotPitzy
NotPitzy

Reputation: 11

Replace:

ans.push(el)

With:

ans.push(array[i])

Upvotes: 1

MikeT
MikeT

Reputation: 5500

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);
        }
    }
}

Upvotes: 0

Ryan Wilson
Ryan Wilson

Reputation: 10765

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();

Upvotes: 1

Related Questions