#javascript #reactjs
#javascript #reactjs
Вопрос:
Я получаю данные из базы данных в виде массива. Итак, теперь я получаю массив, подобный этому:
orders:[
{
_id:1,
name: honda,
}
{
_id:2,
name: suzuki,
}
{
_id:3,
name: audi,
}
]
Итак, мой вопрос в том, как я могу прикрепить новое значение ключа к массиву, поэтому оно должно выглядеть следующим образом:
orders:[
{
_id:1,
name: honda,
opened:true,
}
{
_id:2,
name: suzuki,
opened:true,
}
{
_id:3,
name: audi,
opened:true,
}
]
Сейчас я пытаюсь использовать этот код, но это не работает:
getOrders(orders).then(response => {
response.map(itm=>{
const ordersData=[...itm]
const opened={opened:true}
this.setState({
openedOrders: [ordersData,opened]
})
})
})
openedOrders — это новый объект состояния, который я создаю.
Какое лучшее решение для этого?
Спасибо
Ответ №1:
Ваша карта должна выглядеть следующим образом. (Обратите внимание на оператор return в функции map)
orders.map(item=> {
return {...item, opened:true}
})
Итак, ваша функция может выглядеть следующим образом
getOrders(orders).then(response => {
let openedOrders = orders.map(item=> {
return {...item, opened:true}
})
this.setState({
openedOrders
})
})
Комментарии:
1. Да, но я должен добавить его в состояние с помощью setState. Итак, в этом состоянии открыто новое имя Orders
2. Отредактировал ответ, чтобы использовать openedOrders в качестве нового имени
3. это было лучшее решение… спасибо!
Ответ №2:
Предполагая, что response
содержит первый массив в вашем OP:
getOrders(orders).then(response => {
const openedOrders = response.map(order => ({ ...order, open: true}))
this.setState({ openedOrders } )
})
response.map(order => ({ ...order, open: true})
добавляет ключ open
со значением true
к каждому order
в массиве.
Ответ №3:
Для добавления динамических ключей к объекту в javascript мы используем [] .
var x = [{ _id : 1, name: Suzuki}];
x[0]['opened'] = true;
console.log(x);
// [{ _id : 1, name: Suzuki, opened: true}];
Ответ №4:
Используйте foreach()
для перебора всех порядков в массиве и добавления нужного свойства для каждого порядка.
let orders = [{
_id: 1,
name: 'honda',
}, {
_id: 2,
name: 'suzuki',
}, {
_id: 3,
name: 'audi',
}]
orders.forEach(o => o.opened = true)
console.log(orders)
Ответ №5:
Вы могли бы добавить новое свойство к объектам.
var orders = [{ _id: 1, name: 'honda' }, { _id: 2, name: 'suzuki' }, { _id: 3, name: 'audi' }],
additionalProp = { opened: true };
orders.forEach(o => Object.assign(o, additionalProp));
console.log(orders);
.as-console-wrapper { max-height: 100% !important; top: 0; }
Или сопоставить новый массив без изменения исходных объектов.
var orders = [{ _id: 1, name: 'honda' }, { _id: 2, name: 'suzuki' }, { _id: 3, name: 'audi' }],
additionalProp = { opened: true },
result = orders.map(o => Object.assign({}, o, additionalProp));
console.log(result);
.as-console-wrapper { max-height: 100% !important; top: 0; }