У меня есть такой массив:
"order": [
{ "item_name": " Corn Pie",
"item_status": "ready",
"extras": ["French Fries","Bacon"]
},
{ "item_name": " Corn Pie",
"item_status": "ready",
"extras": ["French Fries","Bacon"]
},
{ "item_name": " Corn Pie",
"item_status": "ready",
"extras": ["French Fries","Bacon"]
},
{ "item_name": " Corn Pie",
"item_status": "ready",
"extras": ["French Fries","Bacon"]
},
{ "item_name": " Corn Pie",
"item_status": "ready",
"extras": []
},
{ "item_name": " Corn Pie",
"item_status": "ready",
"extras": ["French Fries"]
},
{ "item_name": " Corn Pie",
"item_status": "waiting",
"extras": ["French Fries","Bacon"]
}]
и поэтому мне нужно найти, какие объекты дублированный .. для дублирования все 3 свойства должны быть одинаковыми .. Я могу добиться этого, выполнив следующие действия:
order = order.filter((item, index, self) =>
index === self.findIndex((t) => (
(t.item_name === item.item_name) && (t.item_status === item.item_status) && (t.extras.length === item.extras.length)
))
)
этот код работает как шарм ... Я могу понять, почему и как он работает, но мне нужно знать, какие элементы были отфильтрованы и сколько раз это было.
Любые идеи? заранее спасибо .. Я взял тот фильтр из поста пост-фильтр
от автора Эйдриана, я хотел бы оставить комментарий, чтобы задать вопрос прямо там, но у меня нет репутации, чтобы комментировать ... так что я здесь ...
Чтобы быть более ясным, мне нужно знать, какие элементы где дублирован и сколько раз он был отфильтрован, например этот элемент
{ "item_name": " Corn Pie",
"item_status": "ready",
"extras": ["French Fries","Bacon"]
}
будет отфильтрован 4 раза, мне нужно знать эту информацию
результатом должен быть массив, содержащий не дублированные элементы, дублирующий "статус" дается bu, имеющий все одинаковые свойства, например, одно и то же имя, такой же статус и одинаковую длину в дополнениях ... Я уже могу это сделать с фильтром, но мне нужно знать, какие элементы были отфильтрованы и сколько раз они были отфильтрованы
Хорошо ... ты все это сказал. Каковы ожидаемые результаты для информации о дубликатах и как ее использовать?
Для этого лучше всего переписать JS, чтобы он не использовал однострочные стрелочные функции. Дайте себе немного больше места для выполнения другой логики
Вы можете запустить тот же фильтр и просто инвертировать его



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


Вот решение пещерного человека (arr - ваш массив без ключа "порядок"):
arr.map(function(d,i){return JSON.stringify(d)})//stringfy the object
.map(function(d,i,a){//we will have multiple arrays with identical content, select the latest one
return i === a.lastIndexOf(d) && a.filter(function(dd,ii){
return d === dd
})
}).filter(function(d){//filter false
return d;
}).map(function(d,i){//map back to the same object with additional repeated key
var retValue = JSON.parse(d[0]);
retValue.repeated = d.length;
return retValue;
});
Вы получите это:
"[
{
"item_name": " Corn Pie",
"item_status": "ready",
"extras": [
"French Fries",
"Bacon"
],
"repeated": 4
},
{
"item_name": " Corn Pie",
"item_status": "ready",
"extras": [],
"repeated": 1
},
{
"item_name": " Corn Pie",
"item_status": "ready",
"extras": [
"French Fries"
],
"repeated": 1
},
{
"item_name": " Corn Pie",
"item_status": "waiting",
"extras": [
"French Fries",
"Bacon"
],
"repeated": 1
}
]"
спасибо, человек, это решает мою проблему, я вроде новичок в javascript, не знаю, что случилось с голосованием против ... Я думаю, что я довольно ясно понимал свою проблему и предоставил достаточно информации ... предполагаю, что тролли будут ненавидеть везде все время
Я понимаю тебя, чувак. Я рад, что ты получил то, что хотел. Удачи в работе.
Какие ожидаемые результаты? Не очень понятно, о чем вы спрашиваете