Home > Back-end >  How to apply search to an array of arrays of strings?
How to apply search to an array of arrays of strings?

Time:07-19

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

CodePudding user response:

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

CodePudding user response:

Replace:

ans.push(el)

With:

ans.push(array[i])

CodePudding user response:

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

CodePudding user response:

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