Arrays 从数组中提取JS对象字段
这是我的产品Arrays 从数组中提取JS对象字段,arrays,json,multidimensional-array,immutable.js,nested-object,Arrays,Json,Multidimensional Array,Immutable.js,Nested Object,这是我的产品 [ { "quantity": 8, "size": "S", "product": { "_id": "607283d971fbe12de4e42ebe", "title": "LEVI Denim", "name": "TRUC
[
{
"quantity": 8,
"size": "S",
"product": {
"_id": "607283d971fbe12de4e42ebe",
"title": "LEVI Denim",
"name": "TRUCKER JACKET",
"category": "men",
"price": 8999,
"rating": 5,
"sales": 69,
"variant": {
"img": [
"https://lsco.scene7.com/is/image/lsco/levis/clothing/723340131-front-pdp.jpg?fmt=jpeg&qlt=70,1&op_sharpen=0&resMode=sharp2&op_usm=0.8,1,10,0&fit=crop,0&wid=1250&hei=1667",
"https://lsco.scene7.com/is/image/lsco/levis/clothing/723340131-back-pdp.jpg?fmt=jpeg&qlt=70,1&op_sharpen=0&resMode=sharp2&op_usm=0.8,1,10,0&fit=crop,0&wid=1050&hei=1400",
"https://lsco.scene7.com/is/image/lsco/levis/clothing/723340131-alt1-pdp.jpg?fmt=jpeg&qlt=70,1&op_sharpen=0&resMode=sharp2&op_usm=0.8,1,10,0&fit=crop,0&wid=1050&hei=1400"
],
"_id": "607283d971fbe12de4e42ecb",
"variantAvailability": true,
"size": [
{
"_id": "607283d971fbe12de4e42ecc",
"symbol": "S",
"stock": 4
},
{
"_id": "607283d971fbe12de4e42ecd",
"symbol": "L",
"stock": 13
}
]
},
"__v": 0
}
},
{
"quantity": 8,
"size": "XL",
"product": {
"_id": "607285bf70ce0f0660f199ad",
"title": "LEVI Denim",
"name": "SHERPA TRUCKER JACKET",
"category": "men",
"price": 10199,
"rating": 2,
"sales": 18,
"variant": {
"img": [
"https://lsco.scene7.com/is/image/lsco/levis/clothing/163650044-front-pdp.jpg?fmt=jpeg&qlt=70,1&op_sharpen=0&resMode=sharp2&op_usm=0.8,1,10,0&fit=crop,0&wid=1250&hei=1667",
"https://lsco.scene7.com/is/image/lsco/levis/clothing/163650044-back-pdp.jpg?fmt=jpeg&qlt=70,1&op_sharpen=0&resMode=sharp2&op_usm=0.8,1,10,0&fit=crop,0&wid=1050&hei=1400",
"https://lsco.scene7.com/is/image/lsco/levis/clothing/163650044-alt6-pdp.jpg?fmt=jpeg&qlt=70,1&op_sharpen=0&resMode=sharp2&op_usm=0.8,1,10,0&fit=crop,0&wid=1050&hei=1400",
"https://lsco.scene7.com/is/image/lsco/levis/clothing/163650044-alt1-pdp.jpg?fmt=jpeg&qlt=70,1&op_sharpen=0&resMode=sharp2&op_usm=0.8,1,10,0&fit=crop,0&wid=2000&hei=1125"
],
"_id": "607285bf70ce0f0660f199ae",
"variantAvailability": true,
"size": [
{
"_id": "607285bf70ce0f0660f199af",
"symbol": "S",
"stock": 10
},
{
"_id": "607285bf70ce0f0660f199b0",
"symbol": "L",
"stock": 33
},
{
"_id": "607285bf70ce0f0660f199b1",
"symbol": "XL",
"stock": 1
}
]
},
"__v": 0
}
},
{
"quantity": 8,
"size": "S",
"product": {
"_id": "607285bf70ce0f0660f199ad",
"title": "LEVI Denim",
"name": "SHERPA TRUCKER JACKET",
"category": "men",
"price": 10199,
"rating": 2,
"sales": 18,
"variant": {
"img": [
"https://lsco.scene7.com/is/image/lsco/levis/clothing/163650044-front-pdp.jpg?fmt=jpeg&qlt=70,1&op_sharpen=0&resMode=sharp2&op_usm=0.8,1,10,0&fit=crop,0&wid=1250&hei=1667",
"https://lsco.scene7.com/is/image/lsco/levis/clothing/163650044-back-pdp.jpg?fmt=jpeg&qlt=70,1&op_sharpen=0&resMode=sharp2&op_usm=0.8,1,10,0&fit=crop,0&wid=1050&hei=1400",
"https://lsco.scene7.com/is/image/lsco/levis/clothing/163650044-alt6-pdp.jpg?fmt=jpeg&qlt=70,1&op_sharpen=0&resMode=sharp2&op_usm=0.8,1,10,0&fit=crop,0&wid=1050&hei=1400",
"https://lsco.scene7.com/is/image/lsco/levis/clothing/163650044-alt1-pdp.jpg?fmt=jpeg&qlt=70,1&op_sharpen=0&resMode=sharp2&op_usm=0.8,1,10,0&fit=crop,0&wid=2000&hei=1125"
],
"_id": "607285bf70ce0f0660f199ae",
"variantAvailability": true,
"size": [
{
"_id": "607285bf70ce0f0660f199af",
"symbol": "S",
"stock": 10
},
{
"_id": "607285bf70ce0f0660f199b0",
"symbol": "L",
"stock": 33
},
{
"_id": "607285bf70ce0f0660f199b1",
"symbol": "XL",
"stock": 1
}
]
},
"__v": 0
}
},
{
"quantity": 8,
"size": "M",
"product": {
"_id": "6072b314af87143c5cd39b32",
"title": "Levi's Premium",
"name": "EX-BOYFRIEND SHERPA TRUCKER JACKET",
"category": "women",
"price": 12099,
"rating": 5,
"sales": 50,
"variant": {
"img": [
"https://lsco.scene7.com/is/image/lsco/361370034-front-pdp?fmt=jpeg&qlt=70,1&op_sharpen=0&resMode=sharp2&op_usm=0.8,1,10,0&fit=crop,0&wid=1250&hei=1667",
"https://lsco.scene7.com/is/image/lsco/361370034-back-pdp?fmt=jpeg&qlt=70,1&op_sharpen=0&resMode=sharp2&op_usm=0.8,1,10,0&fit=crop,0&wid=2000&hei=1125"
],
"_id": "6072b314af87143c5cd39b37",
"variantAvailability": true,
"size": [
{
"_id": "6072b314af87143c5cd39b38",
"symbol": "XS",
"stock": 10
},
{
"_id": "6072b314af87143c5cd39b39",
"symbol": "M",
"stock": 33
},
{
"_id": "6072b314af87143c5cd39b3a",
"symbol": "XL",
"stock": 1
}
]
},
"__v": 0
}
},
{
"quantity": 8,
"size": "M",
"product": {
"_id": "607283d971fbe12de4e42ebe",
"title": "LEVI Denim",
"name": "TRUCKER JACKET",
"category": "men",
"price": 8999,
"rating": 5,
"sales": 69,
"variant": {
"img": [
"https://lsco.scene7.com/is/image/lsco/levis/clothing/723340144-front-pdp.jpg?fmt=jpeg&qlt=70,1&op_sharpen=0&resMode=sharp2&op_usm=0.8,1,10,0&fit=crop,0&wid=1250&hei=1667",
"https://lsco.scene7.com/is/image/lsco/levis/clothing/723340144-back-pdp.jpg?fmt=jpeg&qlt=70,1&op_sharpen=0&resMode=sharp2&op_usm=0.8,1,10,0&fit=crop,0&wid=1050&hei=1400",
"https://lsco.scene7.com/is/image/lsco/levis/clothing/723340144-alt1-pdp.jpg?fmt=jpeg&qlt=70,1&op_sharpen=0&resMode=sharp2&op_usm=0.8,1,10,0&fit=crop,0&wid=1050&hei=1400"
],
"_id": "607283d971fbe12de4e42ebf",
"variantAvailability": true,
"size": [
{
"_id": "607283d971fbe12de4e42ec0",
"symbol": "XS",
"stock": 10
},
{
"_id": "607283d971fbe12de4e42ec1",
"symbol": "S",
"stock": 10
},
{
"_id": "607283d971fbe12de4e42ec2",
"symbol": "M",
"stock": 10
},
{
"_id": "607283d971fbe12de4e42ec3",
"symbol": "L",
"stock": 33
},
{
"_id": "607283d971fbe12de4e42ec4",
"symbol": "XL",
"stock": 1
}
]
},
"__v": 0
}
},
{
"quantity": 8,
"size": "M",
"product": {
"_id": "607283d971fbe12de4e42ebe",
"title": "LEVI Denim",
"name": "TRUCKER JACKET",
"category": "men",
"price": 8999,
"rating": 5,
"sales": 69,
"variant": {
"img": [
"https://lsco.scene7.com/is/image/lsco/levis/clothing/723340134-front-pdp.jpg?fmt=jpeg&qlt=70,1&op_sharpen=0&resMode=sharp2&op_usm=0.8,1,10,0&fit=crop,0&wid=1250&hei=1667",
"https://lsco.scene7.com/is/image/lsco/levis/clothing/723340134-back-pdp.jpg?fmt=jpeg&qlt=70,1&op_sharpen=0&resMode=sharp2&op_usm=0.8,1,10,0&fit=crop,0&wid=1050&hei=1400",
"https://lsco.scene7.com/is/image/lsco/levis/clothing/723340134-alt1-pdp.jpg?fmt=jpeg&qlt=70,1&op_sharpen=0&resMode=sharp2&op_usm=0.8,1,10,0&fit=crop,0&wid=1050&hei=1400"
],
"_id": "607283d971fbe12de4e42ec5",
"variantAvailability": true,
"size": [
{
"_id": "607283d971fbe12de4e42ec6",
"symbol": "M",
"stock": 10
},
{
"_id": "607283d971fbe12de4e42ec7",
"symbol": "L",
"stock": 44
},
{
"_id": "607283d971fbe12de4e42ec8",
"symbol": "XL",
"stock": 1
},
{
"_id": "607283d971fbe12de4e42ec9",
"symbol": "2XL",
"stock": 44
},
{
"_id": "607283d971fbe12de4e42eca",
"symbol": "3XL",
"stock": 44
}
]
},
"__v": 0
}
},
{
"quantity": 8,
"size": "L",
"product": {
"_id": "607283d971fbe12de4e42ebe",
"title": "LEVI Denim",
"name": "TRUCKER JACKET",
"category": "men",
"price": 8999,
"rating": 5,
"sales": 69,
"variant": {
"img": [
"https://lsco.scene7.com/is/image/lsco/levis/clothing/723340144-front-pdp.jpg?fmt=jpeg&qlt=70,1&op_sharpen=0&resMode=sharp2&op_usm=0.8,1,10,0&fit=crop,0&wid=1250&hei=1667",
"https://lsco.scene7.com/is/image/lsco/levis/clothing/723340144-back-pdp.jpg?fmt=jpeg&qlt=70,1&op_sharpen=0&resMode=sharp2&op_usm=0.8,1,10,0&fit=crop,0&wid=1050&hei=1400",
"https://lsco.scene7.com/is/image/lsco/levis/clothing/723340144-alt1-pdp.jpg?fmt=jpeg&qlt=70,1&op_sharpen=0&resMode=sharp2&op_usm=0.8,1,10,0&fit=crop,0&wid=1050&hei=1400"
],
"_id": "607283d971fbe12de4e42ebf",
"variantAvailability": true,
"size": [
{
"_id": "607283d971fbe12de4e42ec0",
"symbol": "XS",
"stock": 10
},
{
"_id": "607283d971fbe12de4e42ec1",
"symbol": "S",
"stock": 10
},
{
"_id": "607283d971fbe12de4e42ec2",
"symbol": "M",
"stock": 10
},
{
"_id": "607283d971fbe12de4e42ec3",
"symbol": "L",
"stock": 33
},
{
"_id": "607283d971fbe12de4e42ec4",
"symbol": "XL",
"stock": 1
}
]
},
"__v": 0
}
},
{
"quantity": 16,
"size": "S",
"product": {
"_id": "607283d971fbe12de4e42ebe",
"title": "LEVI Denim",
"name": "TRUCKER JACKET",
"category": "men",
"price": 8999,
"rating": 5,
"sales": 69,
"variant": {
"img": [
"https://lsco.scene7.com/is/image/lsco/levis/clothing/723340144-front-pdp.jpg?fmt=jpeg&qlt=70,1&op_sharpen=0&resMode=sharp2&op_usm=0.8,1,10,0&fit=crop,0&wid=1250&hei=1667",
"https://lsco.scene7.com/is/image/lsco/levis/clothing/723340144-back-pdp.jpg?fmt=jpeg&qlt=70,1&op_sharpen=0&resMode=sharp2&op_usm=0.8,1,10,0&fit=crop,0&wid=1050&hei=1400",
"https://lsco.scene7.com/is/image/lsco/levis/clothing/723340144-alt1-pdp.jpg?fmt=jpeg&qlt=70,1&op_sharpen=0&resMode=sharp2&op_usm=0.8,1,10,0&fit=crop,0&wid=1050&hei=1400"
],
"_id": "607283d971fbe12de4e42ebf",
"variantAvailability": true,
"size": [
{
"_id": "607283d971fbe12de4e42ec0",
"symbol": "XS",
"stock": 10
},
{
"_id": "607283d971fbe12de4e42ec1",
"symbol": "S",
"stock": 10
},
{
"_id": "607283d971fbe12de4e42ec2",
"symbol": "M",
"stock": 10
},
{
"_id": "607283d971fbe12de4e42ec3",
"symbol": "L",
"stock": 33
},
{
"_id": "607283d971fbe12de4e42ec4",
"symbol": "XL",
"stock": 1
}
]
},
"__v": 0
}
}
]
每种产品都有数量,尺寸,产品。每个产品都有\u id和变体,每个变体都有\u id。
我想要一个新的康斯特
- 数量
- 大小
- 产品。\u id
- 产品。变量\u id
{
"productId": "607283d971fbe12de4e42ebe",
"variantId": "607283d971fbe12de4e42ebf",
"size": "S",
"quantity": 16
}
我想设置订单,它是一个对象数组,每个对象都包含所有产品的productId、variantId、大小、数量
我在用React。这是我的代码,到目前为止我都能做到。我想以不变的方式来做
function getOrderInfo(product){
//console.log(JSON.stringify(product,null,2))
product.forEach( (item, index) => {
const selectedBasketItem = product.find((item, ind)=> ind === index )
const currentProductId = {productId:selectedBasketItem.product._id}
const currentVariantId = {variantId:selectedBasketItem.product.variant._id}
const quan = {quantity:selectedBasketItem.quantity}
const size = {size:selectedBasketItem.size}
const payload = {...currentProductId, ...currentVariantId, ...size, ...quan}
setOrder({...order,...payload})
})
}
getOrderInfo(basket)
您正在创建许多对象,然后将它们再次展开,我认为这没有任何用处。首先,他们可能会合并
const currentProductId = {productId:selectedBasketItem.product._id}
const currentVariantId = {variantId:selectedBasketItem.product.variant._id}
const quan = {quantity:selectedBasketItem.quantity}
const size = {size:selectedBasketItem.size}
const payload = {...currentProductId, ...currentVariantId, ...size, ...quan}
与
const payload = {
productId:selectedBasketItem.product._id
variantId:selectedBasketItem.product.variant._id,
quantity:selectedBasketItem.quantity,
size:selectedBasketItem.size
}
线路
const selectedBasketItem=product.find((item,ind)=>ind==index)
。
阴影项目
在其内部功能中。它也是不必要的,因为selectedBasketItem
和item
(上部范围之一)是同一个对象!。它基本上通过产品进行循环,并为找到的每个产品搜索产品
现在让我们深入实际任务: js的方法是对两个对象使用或。 首先定义一个记录:
const OrderProduct = Immutable.Record({
productId: null,
variantId: null,
size: null,
quantity,
});
然后,您可以创建记录:
products.forEach((item) => {
const mutableData = {
productId:selectedBasketItem.product._id
variantId:selectedBasketItem.product.variant._id,
quantity:selectedBasketItem.quantity,
size:selectedBasketItem.size
};
const payloadRecord = OrderProduct(mutableData);
// ... do something
});
如果setOrder
需要一个数组(或者更好的是一个Immutable.List
),您可以使用array.map
将产品对象转换为OrderProduct:
const arrayOfProducts = products.map((item) => {
// build payloadRecord as above
return payloadRecord;
}
// To turn it into an Immutable.List:
// const myList = Immutable.List(arrayOfProducts);
setOrder(arrayOfProducts);
请添加一个解释。看见
products.map((item) => {
let { size, quantity, product } = item;
let { _id, variant } = product;
return {
size,
quantity,
productId: _id,
variantId: variant["_id"]
};