我有一个如下所示的json文件。
[
{
"symbol": "USDC",
"name": "USD Coin",
"decimals": "6",
"id": "0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48",
"feeTier": "100",
"amounts": [2499.769116, 2500.269174]
},
{
"symbol": "WETH",
"name": "Wrapped Ether",
"decimals": "18",
"id": "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2",
"feeTier": "3000",
"amounts": [1.0526261272920125, 1.0590149439506866]
},
{
"symbol": "USDC",
"name": "USD Coin",
"decimals": "6",
"id": "0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48",
"feeTier": "500",
"amounts": [2499.591796, 2502.09356]
},
{
"symbol": "WETH",
"name": "Wrapped Ether",
"decimals": "18",
"id": "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2",
"feeTier": "500",
"amounts": [1.0551711392408099, 1.0565026582314214]
},
{
"symbol": "FRAX",
"name": "Frax",
"decimals": "18",
"id": "0x853d955acef822db058eb8505911ed77f175b99e",
"feeTier": "500",
"amounts": [2505.1101184400254, 2507.620759133425]
}
]
我将比较具有相同名称的金额值,并且我想显示第一个元素金额较大的金额。在最终版本中,其他 json 元素将不会显示。实际上最终版本如下;
[
{
"symbol": "USDC",
"name": "USD Coin",
"decimals": "6",
"id": "0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48",
"feeTier": "100",
"amounts": [2499.769116, 2500.269174]
},
{
"symbol": "WETH",
"name": "Wrapped Ether",
"decimals": "18",
"id": "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2",
"feeTier": "3000",
"amounts": [1.0526261272920125, 1.0590149439506866]
},
{
"symbol": "FRAX",
"name": "Frax",
"decimals": "18",
"id": "0x853d955acef822db058eb8505911ed77f175b99e",
"feeTier": "500",
"amounts": [2505.1101184400254, 2507.620759133425]
}
]
我怎样才能做到这一点?
您可以通过迭代对象数组,按“name”属性对它们进行分组,然后过滤每个组以仅包含“amounts”数组的第一个元素大于第二个元素的对象来实现此目的。
演示:
const data = [
{
"symbol": "USDC",
"name": "USD Coin",
"decimals": "6",
"id": "0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48",
"feeTier": "100",
"amounts": [2499.769116, 2500.269174]
},
{
"symbol": "WETH",
"name": "Wrapped Ether",
"decimals": "18",
"id": "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2",
"feeTier": "3000",
"amounts": [1.0526261272920125, 1.0590149439506866]
},
{
"symbol": "USDC",
"name": "USD Coin",
"decimals": "6",
"id": "0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48",
"feeTier": "500",
"amounts": [2499.591796, 2502.09356]
},
{
"symbol": "WETH",
"name": "Wrapped Ether",
"decimals": "18",
"id": "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2",
"feeTier": "500",
"amounts": [1.0551711392408099, 1.0565026582314214]
},
{
"symbol": "FRAX",
"name": "Frax",
"decimals": "18",
"id": "0x853d955acef822db058eb8505911ed77f175b99e",
"feeTier": "500",
"amounts": [2505.1101184400254, 2507.620759133425]
}
];
const filteredData = data.reduce((acc, obj) => {
const existing = acc.find(item => item.name === obj.name);
if (!existing) {
acc.push(obj);
} else {
const [firstAmount, secondAmount] = obj.amounts;
const [existingFirstAmount, existingSecondAmount] = existing.amounts;
if (firstAmount > existingFirstAmount && firstAmount > secondAmount) {
acc = acc.filter(item => item.name !== obj.name);
acc.push(obj);
}
}
return acc;
}, []);
console.log(filteredData);