修改对象中的quantity_available,读入文件.使用节点



我想更改quantity_available,并保存回具有相同格式的文件。这是一个带有对象数组的对象。我用的是node。我首先从一个文件读取到一个变量,对象看起来像这样。

{
fish: [
{
name: 'Red Crown Tail',
price: 20,
image: 'redcrowntail.png',
quantity_available: 139
},
{
name: 'Blue Half Moon',
price: 30,
image: 'halfmoonbetta.png',
quantity_available: 100
},
{
name: 'Black Crown Tail',
price: 15,
image: 'blackcrowntail.png',
quantity_available: 137
},
{
name: 'Galaxy Double Tail',
price: 25,
image: 'gal.png',
quantity_available: 149
},
{
name: 'Opal Crown Tail',
price: 35,
image: 'opal.png',
quantity_available: 147
},
{
name: 'Blue Spade Tail',
price: 23,
image: 'spadetail.png',
quantity_available: 146
}
],
tank: [
{
name: '3.5g Gallon Mini',
price: 20,
image: '3.5gallonminibowl.png',
quantity_available: 129
},
{
name: 'Tank2',
price: 30,
image: 'halfmoonbetta.png',
quantity_available: 139
},
{
name: 'Tank3',
price: 15,
image: 'blackcrowntail.png',
quantity_available: 150
},
{
name: 'Tank4',
price: 25,
image: 'gal.png',
quantity_available: 150
},
{
name: 'Tank5',
price: 35,
image: 'opal.png',
quantity_available: 146
},
{
name: 'Tank6',
price: 23,
image: 'spadetail.png',
quantity_available: 150
}
],
plant: [
{
name: 'Plant',
price: 10,
image: 'AnubiasPlant.jpeg',
quantity_available: 40
},
{
name: 'Cry Plant',
price: 12,
image: 'cry.jpeg',
quantity_available: 150
},
{
name: 'Sw Plant',
price: 13,
image: 'SwordPlant.jpeg',
quantity_available: 144
},
{
name: 'Pink Plant',
price: 20,
image: 'PinkPlant.png',
quantity_available: 150
},
{
name: 'Rotala Plant',
price: 23,
image: 'rotalaPlant.jpeg',
quantity_available: 140
},
{
name: 'Vallisneria Plant',
price: 26,
image: 'vallisneriaPlant.jpeg',
quantity_available: 150
}
]
}
var data2 = fs.readFileSync(pname, 'utf-8');
var products = JSON.parse(data2);
// i need a double loop but i am lost on how to start. '
for(product in products){
for (i=0; i<product.length; i++){
console.log(products[product][i].quantity_available);
}
}

//我想要的只是改变quantity_available。我希望能够检索对象的这一部分,修改并写回文件。我读取了对象,解析了它,现在我需要修改。我将toString对象并重写为文件。

use reduce

如果我没理解错的话,你想知道如何操作这个对象中的数据。我想你已经知道如何读写文件

reduce可以遍历一个数组并返回你想要的

Object.entries(products).reduce((acc, product) => {
const [productKey, productArray] = product;
const updatedProductArray = productArray.map(item => {
// for example change all quantity_available to be 10
item.quantity_available = 10;
return { ...item, };
});
acc[productKey] = updatedProductArray;
return acc;
}, {});

我添加了一个片段与更大的完整的例子,如何获得对象与操作和更改你可能想要的。

const products = {
fish: [
{
name: 'Red Crown Tail',
price: 20,
image: 'redcrowntail.png',
quantity_available: 139
},
{
name: 'Blue Half Moon',
price: 30,
image: 'halfmoonbetta.png',
quantity_available: 100
},
{
name: 'Black Crown Tail',
price: 15,
image: 'blackcrowntail.png',
quantity_available: 137
},
{
name: 'Galaxy Double Tail',
price: 25,
image: 'gal.png',
quantity_available: 149
},
{
name: 'Opal Crown Tail',
price: 35,
image: 'opal.png',
quantity_available: 147
},
{
name: 'Blue Spade Tail',
price: 23,
image: 'spadetail.png',
quantity_available: 146
}
],
tank: [
{
name: '3.5g Gallon Mini',
price: 20,
image: '3.5gallonminibowl.png',
quantity_available: 129
},
{
name: 'Tank2',
price: 30,
image: 'halfmoonbetta.png',
quantity_available: 139
},
{
name: 'Tank3',
price: 15,
image: 'blackcrowntail.png',
quantity_available: 150
},
{
name: 'Tank4',
price: 25,
image: 'gal.png',
quantity_available: 150
},
{
name: 'Tank5',
price: 35,
image: 'opal.png',
quantity_available: 146
},
{
name: 'Tank6',
price: 23,
image: 'spadetail.png',
quantity_available: 150
}
],
plant: [
{
name: 'Plant',
price: 10,
image: 'AnubiasPlant.jpeg',
quantity_available: 40
},
{
name: 'Cry Plant',
price: 12,
image: 'cry.jpeg',
quantity_available: 150
},
{
name: 'Sw Plant',
price: 13,
image: 'SwordPlant.jpeg',
quantity_available: 144
},
{
name: 'Pink Plant',
price: 20,
image: 'PinkPlant.png',
quantity_available: 150
},
{
name: 'Rotala Plant',
price: 23,
image: 'rotalaPlant.jpeg',
quantity_available: 140
},
{
name: 'Vallisneria Plant',
price: 26,
image: 'vallisneriaPlant.jpeg',
quantity_available: 150
}
]
}
const updatedProducts = Object.entries(products).reduce((acc, product) => {
const [productKey, productArray] = product;
const updatedProductArray = productArray.map(item => {
if (productKey === 'fish') {
if (item.name === 'Red Crown Tail') {
item.quantity_available = item.quantity_available * 2;
item.whatChanged = 'quantity_available multipled by 2';
} else {
item.quantity_available = item.quantity_available * 3;
item.whatChanged = 'quantity_available multipled by 3';
}
return { ...item };
}
if (productKey === 'tank') {
item.quantity_available = item.quantity_available + 50;
item.whatChanged = 'quantity_available added 50';
return { ...item };
}
// every other case will do that
item.quantity_available = item.quantity_available - 40;
item.whatChanged = 'quantity_available subtracted 40';
return { ...item };
});

acc[productKey] = updatedProductArray;
return acc;
}, {});
console.log('updatedProducts', updatedProducts);

let data2 = fs.readFileSync(pname, 'utf-8');
let products = JSON.parse(data2);
products = Object.keys(products).map((key) => ({
[key]: products[key].map((product) => ({
...product,
quantity_available: product.quantity_available + 1,
})),
}));
console.log(products);

最新更新