Я пытаюсь удалить некоторые данные из сложного объекта.
Формат исходных данных следующий.
let originData =
[
{
name : exampleDepth1,
depth1Data :
[
{
name : exampleDepth2,
depth2Data :
[
{
code: 1234///will be delete from that data
},
...
]
},
...
]
},
....
]
let willbeDeletecode = [ 3, 100, 1234, 1000];
Имя удаляемого массива - это значение code
в массиве depth2Data
, равное originData
, Имя удаляемого массива willbeDeletecode
.
Извините, если вам было неудобно.
Я пытаюсь стереть это двумя способами.
let deleteBook = {}
_.forEach(willbeDeletecode, (deleteCode) => {
deleteBook[`${deleteCode}`] = deleteCode;
})
_.remove(originData, (depth1) => {
_.remove(depth1.depth1Data, (depth2) => {
/*
// delete with object hash
_.remove(depth2.depth2Data, (eachDepth2Data) => {
return deleteBook[eachDepth2Data.code] === undefined
})
*/
/*
// delete with forEach
let ret = false;
_.remove(depth2.depth2Data, (eachDepth2Data) => {
_.forEach(willbeDeletecode, (deleteCode) => {
if(deleteCode === eachDepth2Data.code){
ret = true;
return false;
}
})
return ret
})
*/
return depth2.depth2Data.length === 0;
})
return depth1.depth1Data.length === 0;
})
У меня есть два способа аннотировать каждый из них.
Первый - создать объект (deleteBook
), вставить данные willbeDeletecode
и использовать их для удаления lodash.
Второй метод - это полное сравнение с помощью функции forEach
.
Вышеуказанный метод был повторен 1000 раз для сравнения. В результате первый метод составляет 100 ~ 200 мс, а второй - 500 ~ 700 мс.
Конечно, willbeDeletecode
составляет около 10 или около того, но я думал, что хеш объекта был быстрее. Но результат оказался обратным.
Если в willbeDeletecode
есть еще переменные, будет ли другой вывод? Я хочу знать, почему это приводит.