Я хотел бы фильтровать в myArray ключи по именам, содержащие строку «item» (все «item1», «item2», «item3» и т. д.)
const combined = myArray.map(e => Object.assign(e, MyArrayDefinition.find(k => k.item === e.item)));
Я пробовал это с .includes, но это не работает
const combined = myArray.map(e => Object.assign(e, MyArrayDefinition.find(k => k.includes('item') === e.item)));
Мои массивы
const myArray = [{
"shop": "shop1",
"item1": "my apple 1",
"item2": "my carrot 1",
}, {
"shop": "shop2",
"item1": "my apple 0",
"item2": "my carrot 1",
}, {
"shop": "shop2",
"item1": "my apple 1",
"item2": "my carrot 0",
}, ];
const MyArrayDefinition = [ {
"item": "my apple 0",
"color": "red",
"group": "my fruit",
"score": 0
}, {
"item": "my carrot 1",
"color": "orange",
"group": "my vegetable",
"score": 1
}, {
"item": "my apple 1",
"color": "red",
"group": "my fruit",
"score": 1
}, {
"item": "my carrot 0",
"color": "orange",
"group": "my vegetable",
"score": 0
}];
Вы сравниваете item1 с item или item2 с item?
что происходит с item2?
Я сравниваю item1 и item2 с item, чтобы получить их цвета и их группы.
пожалуйста, добавьте результат к вопросу и укажите, почему элемент является именно тем, а не другим элементом.



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


Что-то вроде:
const filtered = myArray.map((obj) => {
const objKeys = Object.keys(obj);
const result = objKeys.reduce((acc, k) => {
if (k.match(/item/)) { // just keys withe "item"
acc[k] = obj[k];
}
return acc;
}, {});
return result;
})
Если требуется массив всех найденных элементов, вы можете отфильтровать ключи и получить элементы массива определений.
var array = [{ shop: "shop1", item1: "my apple 1", item2: "my carrot 1" }, { shop: "shop2", item1: "my apple 0", item2: "my carrot 1" }, { shop: "shop2", item1: "my apple 0", item2: "my carrot 0" }],
definition = [{ item: "my apple 0", color: "red", group: "my fruit", score: 0 }, { item: "my carrot 1", color: "orange", group: "my vegetable", score: 1 }, { item: "my apple 1", color: "red", group: "my fruit", score: 1 }, { item: "my carrot 0", color: "orange", group: "my vegetable", score: 0 }],
result = array.map(o => ({
shop: o.shop,
items: Object
.keys(o)
.filter(k => k.startsWith('item'))
.map(k => definition.find(({ item }) => item === o[k]))
}));
console.info(result);.as-console-wrapper { max-height: 100% !important; top: 0; }Большое спасибо за вашу помощь! но это многомерный объект. Мне нужен простой массив с объектами. Примерно так [{shop: "shop1", "item": "my apple 1", "color": "red", "group": "my fruit", "score": 1}, {shop: "shop1 "," item ":" мое яблоко 1 "," color ":" красный "," group ":" my fruit "," score ": 1} и т. д.]
какой предмет ты хочешь взять? item1 или item2?
Я бы хотел забрать все вещи
а как должен выглядеть массив для первого объекта?
каждый объект - это уникальный предмет + уникальный магазин, а оценка - это их сумма
Альтернативой является использование функции filter и функции includes для фильтрации этих объектов с помощью ключей === item и существующих с массивом MyArrayDefinition.
В этом примере есть следующий объект, значения которого не существуют в MyArrayDefinition:
{
"shop": "shop33",
"item1": "my apple 33",
"item2": "my carrot 33"
}
const myArray = [{ "shop": "shop1", "item1": "my apple 1 my fruit", "item2": "my carrot 1",}, { "shop": "shop2", "item1": "my apple 0", "item2": "my carrot 1",}, { "shop": "shop2", "item1": "my apple 0", "item2": "my carrot 0",}, { "shop": "shop33", "item1": "my apple 33", "item2": "my carrot 33",}],
MyArrayDefinition = [{ "item": "my apple 0", "color": "red", "group": "my fruit", "score": 0}, { "item": "my carrot 1", "color": "orange", "group": "my vegetable", "score": 1}, { "item": "my apple 1", "color": "red", "group": "my fruit", "score": 1}, { "item": "my carrot 0", "color": "orange", "group": "my vegetable", "score": 0}],
mappedItems = MyArrayDefinition.map(({item}) => item), // convert to an array with only values from item.
result = myArray.filter(o => Object.keys(o).some(k => k.includes('item') && mappedItems.includes(o[k]))); // get the object with at least one key === item and which value exists within mappedItems.
console.info(result);.as-console-wrapper { max-height: 100% !important; top: 0; }
пожалуйста, добавьте желаемый результат ...