У меня есть объект со следующей структурой (упрощенная версия):
{
"time": 100,
"complete" : true,
"results" : {
"total": 10,
"score": 3,
"results": [
{
"id" : 123,
"name": "test123"
},
{
"id" : 123,
"name": "test4554"
}
]
}
}
Как использовать lodash ._uniqBy для дедупликации результатов на основе уникального ключа results.results.id?
Чтобы уточнить, я бы хотел, чтобы дедуплицированный набор результатов возвращался в исходной структуре объекта, например
{
"time": 100,
"complete" : true,
"results" : {
"total": 10,
"score": 3,
"results": [
{
"id" : 123,
"name": "test123"
}
]
}
}
Благодарность
сделано, см. выше



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Вы можете достичь своей цели, просто передав правую часть вашего объекта в функцию _.uniqBy(array, [iteratee=_.identity]).
Следующее, что вам нужно сделать, это «объединить» результат lodash uniqBy и ваш объект. Это немного сложно. Предлагаю вам использовать метод ES6Object.assign() и оператор распространение.
Ознакомьтесь с моим решением. Надеюсь это поможет.
const myObj = {
"time": 100,
"complete" : true,
"results" : {
"total": 10,
"score": 3,
"results": [
{"id" : 123, "name": "test123"},
{"id" : 123, "name": "test4554"}
]
}
};
const uniq = _.uniqBy(myObj.results.results, 'id');
const resultWrapper = Object.assign({}, myObj.results, { results: [...uniq] });
const resultObj = Object.assign({}, myObj, { results: resultWrapper });
console.info( resultObj );<script src = "https://cdn.jsdelivr.net/npm/[email protected]/lodash.min.js"></script>Спасибо за предложенное вами исправление. Можно ли вернуть дедуплицированный набор результатов в исходной структуре объекта? например : {"time": 100, "complete": true, "results": {"total": 10, "score": 3, "results": [{"id": 123, "name": "test123" }]}};
Вы можете использовать что-то вроде этого
const myObj = {
time: 100,
complete : true,
results : {
total: 10,
score: 3,
results: [
{id : 123, name: "test123"},
{id : 123, name: "test4554"}
]
}
};
_.set(myObj, 'results.results', _.uniqBy(_.get(myObj, 'results.results'), 'id'))<script src = "https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.5/lodash.js"></script>
пожалуйста, добавьте желаемый результат и то, что вы пробовали.