У меня есть два массива:
Это основной массив (я печатаю его в html, но пользователь может удалять объекты):
checkboxes = [
{name: "boxes", color: "red"},
{name: "boxes", color: "orange"},
{name: "tree", color: "green"}
{name: "tree", color: "red"}
{name: "tree", color: "yellow"}
]
А это массив с элементами, которые нужно удалить в checkboxes[]:
finalArray = [
{name: "tree", color: "green"}
{name: "tree", color: "red"}
{name: "tree", color: "yellow"}
]
Результат после удаления одинаковых объектов из этого массива должен быть:
checkboxes = [
{name: "boxes", color: "red"},
{name: "boxes", color: "orange"}
]
Итак, я получаю массив (finalArray[]) с объектами для удаления в флажках[].
Все одинаковые объекты должны быть удалены.
Я пробовал:
.filter и .map, но я не получил прогресса.
Спасибо.
В finalArray есть объекты, которые нужно удалить из флажков []. Это как условие. Если я получаю этот массив, мне нужно сделать так, чтобы флажки имели только разные объекты.
Дело в том, что каждый объект не равен любому другому объекту. {a: 1}
не равен другому {a: 1}
объекту.
попробуйте использовать фильтр и проверьте, существует ли этот элемент в finalArray, используя найти внутри.
var checkboxes = [
{ name: "boxes", color: "red" },
{ name: "boxes", color: "orange" },
{ name: "tree", color: "green" },
{ name: "tree", color: "red" },
{ name: "tree", color: "yellow" },
];
var finalArray = [
{ name: "tree", color: "green" },
{ name: "tree", color: "red" },
{ name: "tree", color: "yellow" },
];
checkboxes = checkboxes.filter(element => !finalArray.find(e => e.name === element.name && e.color === element.color));
let checkboxes = [
{name: "boxes", color: "red"},
{name: "boxes", color: "orange"},
{name: "tree", color: "green"},
{name: "tree", color: "red"},
{name: "tree", color: "yellow"}
]
let finalArray = [
{name: "tree", color: "green"},
{name: "tree", color: "red"},
{name: "tree", color: "yellow"}
]
checkboxes = checkboxes.filter(ele => !finalArray.some(finalEle => JSON.stringify(finalEle) === JSON.stringify(ele)))
console.info(checkboxes)
В этом случае мощь работает, но использование JSON.stringify()
ненадежно.
да, в другом случае лучший ответ - проверенное свойство объекта
почему ненадежно использовать JSON.stringify? может быть, мне нужно было бы иметь идентификатор для деревьев и ящиков?
JSON.stringify({color: "red", name: "boxes"})
и JSON.stringify({name: "boxes", color: "red"})
Порядок появления свойств в выводе .stringify()
не гарантируется. Как я уже сказал, мощь работает, но может и не работать, даже если объекты кажутся равными. Кроме того, если объекты имеют значения свойств, которые не могут быть частью JSON, это также не сработает. В общем, это не очень хороший способ сделать что-то.
Подобные объекты нужно сравнивать с вашим собственным кодом, который работает в соответствии с вашими потребностями, что означает «равный». Обычно в JavaScript два разных объекта никогда не будут
==
друг к другу, независимо от того, что они содержат.