我正在嘗試制作一個簡單的應用程式來通過 REST API 更新 WooCommerce 中的價格。
我有 arrayOne,它有 SKU 來自我的 ERP 的更新價格
[
{sku=PD-1000-B, price=9800.00},
{sku=PD-1007-A, price=9678.16}
]
arrayTwo 包含來自 woocommerce、SKU、id(我需要獲取)和當前價格的所有產品
[
{sku=PD-1000-B, id=1622.0, price=8145.9},
{sku=PD-1007-A, id=1624.0, price=9678.16}
]
我想將 arrayTwo 與 arrayOne 進行比較,如果 arrayOne 中的價格更大,那么所有的巧合組合并創建新的陣列。像這樣的東西
[
{sku=PD-1000-B, id=1622.0, price=9800.00}
]
因為唯一更高的價格是 PD-1000-B。
到目前為止我所得到的只是創建一個新的 Set 但這并不能比較任何東西,想法是減少只更改要更新的數量。
編輯:截至目前,我只是使用以下命令將 arrayTwo 中的價格替換為 arrayOne 中的價格:
let set = new Set();
for (let i = 0; i < data.length; i )
set.add(data[i]['sku'])
for (let i = 0; i < container.length; i )
if (set.has(container[i]['sku']))
container[i]['price'] = data[i]['price'];
container 是一個空變數,我用來收集從 WooCommerce 獲得的資料作為陣列,而 data 是一個包含更新價格 sku 的陣列。
謝謝你。
uj5u.com熱心網友回復:
您可以通過兩個步驟來實作這一點:
- 找出最偉大的
arrOne - 與對應的比較
arrTwo
您可以為此使用這個不錯的功能:
const arrOne = [
{
sku: "PD-1000-B",
price: 9678.16
},
{
sku: "PD-1000-B",
price: 9800.00
},
{
sku: "PD-1007-C",
price: 9714.16
},
{
sku: "PD-1007-C",
price: 9270.00
}
]
const arrTwo = [
{sku: "PD-1000-B", id:1622.0, price:8145.9},
{sku: "PD-1007-A", id:1624.0, price:9678.16},
{sku: "PD-1007-C", id:1627.0, price:9478.16},
]
const findAllHighest = (arr) => {
// 1) get highest one of each in arrOne
const arrOneGreatest = arr.reduce((prev, cur) => {
if(!prev[cur.sku]){
prev[cur.sku] = cur
return prev
}
if(cur.price > prev[cur.sku].price){
prev[cur.sku] = cur
}
return prev
}, {})
// match to arrayTwo
const result = arrTwo.map(el => {
const arrOneObj = Object.values(arrOneGreatest).find(n => n.sku === el.sku)
if(!arrOneObj)
return el
if(arrOneObj.price > el.price)
el.price = arrOneObj.price
return el
}, [])
return result
}
console.log(findAllHighest(arrOne))
.as-console-wrapper { max-height: 100% !important; top: 0; }
uj5u.com熱心網友回復:
我會這樣嘗試:
var arrayOne = [
{sku: 'PD-1000-B', price: 9800.00},
{sku: 'PD-1007-A', price: 9678.16}
];
var arrayTwo = [
{sku: 'PD-1000-B', id: 1622.0, price: 8145.9},
{sku: 'PD-1007-A', id: 1624.0, price: 9678.16}
];
// convert the array into the object {sku1: {}, sku2: {}, ...}
var arrayOne_obj = {}
for (let obj of arrayOne)
arrayOne_obj[obj.sku] = {'price': obj.price};
// convert the array into the object {sku1: {}, sku2: {}, ...}
var arrayTwo_obj = {}
for (let obj of arrayTwo)
arrayTwo_obj[obj.sku] = {'price': obj.price, 'id': obj.id};
// loop through the 'sku'-subobjects of the 'arrayOne_obj' object
// compare its prices with prices of the same 'sku'-subobject of 'arrayTwo_obj',
// and make the output array
var output = [];
for (let sku in arrayOne_obj) {
let subObjOne = arrayOne_obj[sku];
let subObjTwo = arrayTwo_obj[sku];
if (subObjOne.price > subObjTwo.price) {
output.push({'sku':sku, 'id': subObjTwo.id, 'price':subObjOne.price});
}
}
console.log(output); // output [ {sku: 'PD-1000-B', id:1622.0, price:9800.00} ]
.as-console-wrapper { max-height: 100% !important; top: 0; }
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/404524.html
標籤:
