如何减去对象值并将结果添加到新的 属性
How to subtract object values and add result to a new property
我有一组这样的对象
const arr = [
{time: '21/1/1998', sold: 8848},
{time: '21/1/1997', sold: 8804},
{time: '21/1/1996', sold: 8756},
{time: '21/1/1995', sold: 8732},
{time: '21/1/1994', sold: 8691},
{time: '21/1/1993', sold: 8620},
{time: '21/1/1992', sold: 8511},
{time: '21/1/1991', sold: 8511},
{time: '21/1/1990', sold: 8498},
];
我想要实现的是减去销售价值 first - second
、second - third
、third - fourth
等,并将该价值添加到新的 属性 称为 soldInPeriod
最后一个应该是0.
这是我想要的示例:
const arr = [
{time: '21/1/1998', sold: 8848, soldInPeriod: 44},
{time: '21/1/1997', sold: 8804, soldInPeriod: 48},
{time: '21/1/1996', sold: 8756, soldInPeriod: 24},
{time: '21/1/1995', sold: 8732, soldInPeriod: 41},
{time: '21/1/1994', sold: 8691, soldInPeriod: 71},
{time: '21/1/1993', sold: 8620, soldInPeriod: 109},
{time: '21/1/1992', sold: 8511, soldInPeriod: 0},
{time: '21/1/1991', sold: 8511, soldInPeriod: 13},
{time: '21/1/1990', sold: 8498, soldInPeriod: 0},
];
我试图通过使用 reduce
来实现这一点
const newArr = Object.values(arr.reduce(function(r, { time, sold }) {
r[sold] = r[sold] || {time, sold, soldInPeriod: 0 };
console.log(sold)
r[sold].soldInPeriod = r[sold].sold - sold;
return r;
}, Object.create(null)));
console.log(newArr)
但这不是我想要的,因为 soldInPeriod
始终为 0。我该怎么做?任何示例将不胜感激!
简单地映射数组并获取具有索引的下一个对象并减去该值。
const arr = [
{ time: "21/1/1998", sold: 8848 },
{ time: "21/1/1997", sold: 8804 },
{ time: "21/1/1996", sold: 8756 },
{ time: "21/1/1995", sold: 8732 },
{ time: "21/1/1994", sold: 8691 },
{ time: "21/1/1993", sold: 8620 },
{ time: "21/1/1992", sold: 8511 },
{ time: "21/1/1991", sold: 8511 },
{ time: "21/1/1990", sold: 8498 },
];
const result = arr.map((obj, i, srcArray) => {
return { ...obj, soldInPeriod: obj.sold - srcArray[i + 1]?.sold || 0 };
});
console.log(result);
使用单行语法
const result = arr.map((obj, i, srcArray) => ({ ...obj, soldInPeriod: obj.sold - srcArray[i + 1]?.sold || 0 }));
使用数组映射方法:
arr.map((item, idx, src) => {
if (idx === arr.length - 1)
item.soldInPeriod = 0
else
item.soldInPeriod = item.sold - src[idx+1].sold;
return item;
})
试试这个。
for(let i = 0; i<arr.length;i++){
arr[i].soldInPeriod = arr[i].sold - arr[i+1]?.sold || 0
}
您也可以使用 ForEach 循环来进一步简化它。
arr.forEach((item,index) => {
item.soldInPeriod = item.sold - arr[index+1]?.sold || 0
})
我有一组这样的对象
const arr = [
{time: '21/1/1998', sold: 8848},
{time: '21/1/1997', sold: 8804},
{time: '21/1/1996', sold: 8756},
{time: '21/1/1995', sold: 8732},
{time: '21/1/1994', sold: 8691},
{time: '21/1/1993', sold: 8620},
{time: '21/1/1992', sold: 8511},
{time: '21/1/1991', sold: 8511},
{time: '21/1/1990', sold: 8498},
];
我想要实现的是减去销售价值 first - second
、second - third
、third - fourth
等,并将该价值添加到新的 属性 称为 soldInPeriod
最后一个应该是0.
这是我想要的示例:
const arr = [
{time: '21/1/1998', sold: 8848, soldInPeriod: 44},
{time: '21/1/1997', sold: 8804, soldInPeriod: 48},
{time: '21/1/1996', sold: 8756, soldInPeriod: 24},
{time: '21/1/1995', sold: 8732, soldInPeriod: 41},
{time: '21/1/1994', sold: 8691, soldInPeriod: 71},
{time: '21/1/1993', sold: 8620, soldInPeriod: 109},
{time: '21/1/1992', sold: 8511, soldInPeriod: 0},
{time: '21/1/1991', sold: 8511, soldInPeriod: 13},
{time: '21/1/1990', sold: 8498, soldInPeriod: 0},
];
我试图通过使用 reduce
来实现这一点const newArr = Object.values(arr.reduce(function(r, { time, sold }) {
r[sold] = r[sold] || {time, sold, soldInPeriod: 0 };
console.log(sold)
r[sold].soldInPeriod = r[sold].sold - sold;
return r;
}, Object.create(null)));
console.log(newArr)
但这不是我想要的,因为 soldInPeriod
始终为 0。我该怎么做?任何示例将不胜感激!
简单地映射数组并获取具有索引的下一个对象并减去该值。
const arr = [
{ time: "21/1/1998", sold: 8848 },
{ time: "21/1/1997", sold: 8804 },
{ time: "21/1/1996", sold: 8756 },
{ time: "21/1/1995", sold: 8732 },
{ time: "21/1/1994", sold: 8691 },
{ time: "21/1/1993", sold: 8620 },
{ time: "21/1/1992", sold: 8511 },
{ time: "21/1/1991", sold: 8511 },
{ time: "21/1/1990", sold: 8498 },
];
const result = arr.map((obj, i, srcArray) => {
return { ...obj, soldInPeriod: obj.sold - srcArray[i + 1]?.sold || 0 };
});
console.log(result);
使用单行语法
const result = arr.map((obj, i, srcArray) => ({ ...obj, soldInPeriod: obj.sold - srcArray[i + 1]?.sold || 0 }));
使用数组映射方法:
arr.map((item, idx, src) => {
if (idx === arr.length - 1)
item.soldInPeriod = 0
else
item.soldInPeriod = item.sold - src[idx+1].sold;
return item;
})
试试这个。
for(let i = 0; i<arr.length;i++){
arr[i].soldInPeriod = arr[i].sold - arr[i+1]?.sold || 0
}
您也可以使用 ForEach 循环来进一步简化它。
arr.forEach((item,index) => {
item.soldInPeriod = item.sold - arr[index+1]?.sold || 0
})