#javascript #arrays #reactjs #rendering
#javascript #массивы #reactjs #визуализация
Вопрос:
У меня есть определенный массив из реквизитов, который приведен ниже
this.props.fruits= [
{
source: "Apple",
code: 101,
},
{
source: "banana",
code: 105,
},
{ source: "Mango",
code: 107,
},
];
в моем состоянии я должен сохранить код только для отправки его на сервер, мое состояние приведено ниже
this.state ={
myfruits:[101,105]
}
Я должен отобразить имя myfruits в элементе DOM
пример рендеринга элемента DOM
My Fruits : Apple , banana
Ответ №1:
Вы могли бы создать комбинацию filter, map и join, чтобы заставить это работать.
Пример не реагирует, но показывает, как этого можно достичь.
const fruits = [
{
source: "Apple",
code: 101,
},
{
source: "banana",
code: 105,
},
{ source: "Mango",
code: 107,
},
];
const state = [101, 105];
const getFruitNames = () => fruits
.filter(({ code }) => state.includes(code)) // Get all fruit objects where the code is also in state
.map(({ source }) => source) // Only return the source (name)
.join(", "); // Turn into a comma seperated string
console.log(`My Fruits: ${getFruitNames()}`);
Комментарии:
1. .метод join(«, «) не работает при рендеринге, он возвращает как [object, object] .. есть ли какое-либо решение
2. @Sanjaikumar Это означает, что элементы, к которым вы присоединяетесь, являются объектами. Вам нужно только вернуть имя, которое вы хотите показать, если у вас есть еще какой-то код, я могу попытаться его отладить.
Ответ №2:
Вы можете использовать комбинацию метода filter и map,
this.props.fruits.filter((fruit) => this.state.myfruits.includes(fruit.code))
.map((fruit) => fruit.source)
Это должно решить вашу проблему. Вы можете прочитать больше о map и filter здесь .