nodejs/javascript组合相同的项目并设置最高/最低价格



我有这个数组,我想把它们堆叠起来,我只拥有每件物品一次,但我需要其中的最高和最低价格。

这就是我的阵列

[ { sku: '199',
name: 'FAMAS | God of War (Factory New)',
price: 2003892,
caseid: '7' },
{ sku: '199',
name: 'FAMAS | God of War (Minimal Wear)',
price: 1703308,
caseid: '7' },
{ sku: '199',
name: 'FAMAS | God of War (Field-Tested)',
price: 1345613,
caseid: '7' },
{ sku: '199',
name: 'FAMAS | God of War (Well-Worn)',
price: 1170684,
caseid: '7' },
{ sku: '199',
name: 'FAMAS | God of War (Battle-Scarred)',
price: 1112150,
caseid: '7' }]

在那里你可以看到最低的"价格"是1112150,最高的是2003892

这就是我想要的:

[ { sku: '199',
name: 'FAMAS | God of War (Factory New)',
highestprice: 2003892,
lowestprice: 1112150,
caseid: '7' }]

我想拥有每个sku中最高的"价格"和最低的"价格。组合成一个数组结果,就像我上次发布的那样。

您可以缩小数组并查找具有相同sku的相同对象。然后取最小值和最大值。

var array = [ { sku: '199', name: 'FAMAS | God of War (Factory New)', price: 2003892, caseid: '7' }, { sku: '199', name: 'FAMAS | God of War (Minimal Wear)', price: 1703308, caseid: '7' }, { sku: '199', name: 'FAMAS | God of War (Field-Tested)', price: 1345613, caseid: '7' }, { sku: '199', name: 'FAMAS | God of War (Well-Worn)', price: 1170684, caseid: '7' }, { sku: '199', name: 'FAMAS | God of War (Battle-Scarred)', price: 1112150, caseid: '7' }],
result = array.reduce((r, { sku, name, price, caseid }) => {
var temp = r.find(o => sku === o.sku);
if (!temp) {
return r.concat({ sku, name, highestprice: price, lowestprice: price, caseid });
}
temp.lowestprice = Math.min(price, temp.lowestprice);
temp.highestprice = Math.max(price, temp.highestprice);
return r;
}, []);

console.log(result);

此函数应该为您提供所需的输出:

function findHiLo(arr, sku) {
let min = +Infinity;
let max = -Infinity;
let max_index = 0;
for(let i=0; i<arr.length; i++) {
if(arr[i]["sku"] === sku) {
if(arr[i]["price"] < min) min = arr[i]["price"];
if(arr[i]["price"] > max) {
max = arr[i]["price"];
max_index = i;
}
}
}
return { "sku": sku,
"name": arr[max_index]["name"],
"highestprice": max,
"lowestprice": min,
"caseid": "7" };
}

它遍历整个数组,并查找具有给定"sku"的项目。在这个过程中,它会找到价格最高和最低的一个。

当在这样的数据上运行时:findHiLo(data, '199'),它返回以下对象:

{ sku: "199", name: "FAMAS | God of War (Factory New)", highestprice: 2003892, lowestprice: 1112150, caseid: "7" }

名称是从价格最高的商品中复制的。

我唯一不确定的是"caseid"财产。我在这个函数中将它设置为"7",您可能需要更改它。

在JavaScript数组(以及Java(中,有一种方法叫做sort。请查看文档。

以下是如何在您的示例中实现它:

let array = [ { sku: '199',
name: 'FAMAS | God of War (Factory New)',
price: 2003892,
caseid: '7' },
{ sku: '199',
name: 'FAMAS | God of War (Minimal Wear)',
price: 1703308,
caseid: '7' },
{ sku: '199',
name: 'FAMAS | God of War (Field-Tested)',
price: 1345613,
caseid: '7' },
{ sku: '199',
name: 'FAMAS | God of War (Well-Worn)',
price: 1170684,
caseid: '7' },
{ sku: '199',
name: 'FAMAS | The expensive God of War (Battle-Scarred)',
price: 111215000,
caseid: '7' }];
let sorted = array.sort(function(a, b) {
return Math.sign(b.price - a.price);
/* 
* This compares the prices. Sign returns 1, if
* the value is positive, -1 when negative and zero
* when 0 is given.
*/
});
// OUTPUT
document.body.appendChild(document.createTextNode(
JSON.stringify(sorted)
));

我真的不明白你所说的堆栈是什么意思,但根据我对你的问题的理解,你可以试试这个

let highestPrice = 0;
let lowestPrice = 0;
let sku = ' ';
let caseID = ' ';
let name = ' ';
let newObj = {};
// Let's call your array *arr*, you could do this
arr.map((elem, index) => {
if (elem.price > highestPrice ) {
highestPrice = elem.price;
sku = elem.sku;
caseID = elem.caseid;
name = elem.name;
}
if (elem.price < lowestPrice ) {
lowestPrice = elem.price;
}
});
newObj = {
sku: sku, 
highestprice: highestPrice, 
lowestprice: lowestPrice,
caseid: caseID;
name: name
}

最新更新