Robię filtracje tablicy obiektów A na zasadzie jeśli A.name zawiera się w tablicy stringów B to go usuwam.
Skoro ten kod jest O(1):
const input = [
{ nick: 'Some name1', x: 19, y: 24, grp: 4, id: '19340' },
{ nick: 'Some name2', x: 20, y: 27, grp: 11, id: '19343' },
{ nick: 'Some name1', x: 22, y: 27, grp: 11, id: '19344' },
{ nick: 'Some name3', x: 22, y: 30, grp: 11, id: '19350' },
{ nick: 'Some name4', x: 22, y: 12, grp: 23, id: '19374' },
{ nick: 'Some name5', x: 22, y: 29, grp: 23, id: '19377' }
];
const nameToOmit = ['Some name1', 'Some name4'];
const namesToOmitSet = new Set(nameToOmit);
const finalArr = input.filter(it => (!namesToOmitSet.has(it.nick)));
console.log(finalArr)
a ten kod jest O(n):
const input = [
{ nick: 'Some name1', x: 19, y: 24, grp: 4, id: '19340' },
{ nick: 'Some name2', x: 20, y: 27, grp: 11, id: '19343' },
{ nick: 'Some name1', x: 22, y: 27, grp: 11, id: '19344' },
{ nick: 'Some name3', x: 22, y: 30, grp: 11, id: '19350' },
{ nick: 'Some name4', x: 22, y: 12, grp: 23, id: '19374' },
{ nick: 'Some name5', x: 22, y: 29, grp: 23, id: '19377' }
];
const nameToOmit = ['Some name1', 'Some name4'];
const finalArr = [];
const findInArray = (val, arr) => {
for(let i = 0, l = arr.length; i < l; i++) {
if(arr[i] === val) return true;
}
return false;
};
for(let i = 0, l = input.length; i < l; i++) {
if (!findInArray(input[i].nick, nameToOmit)) {
finalArr.push({
name: input[i].nick,
id: input[i].id
});
}
}
console.log(finalArr)
To jakim cudem ta pętla w pętli jest szybsza wg jsperf? Czy może się myle i ten 1 kod defacto nie jest O(1)? Istnieje jakiś inny, szybszy sposób na przefiltrowanie tej tablicy obiektów w ten sposób jak w przykładach?