我只是在學習 javascript,我正在嘗試通過 GAS 更新 woocommerce 產品。
有問題的問題如下:
我有一個變數可以決議來自 woocommerce 的回應
for (let sku of skuSearch) {
var surl = website "/wp-json/wc/v3/products?consumer_key=" ck "&consumer_secret=" cs "&sku=" sku;
var url = surl
Logger.log(url)
var result = UrlFetchApp.fetch(url, optionsGet);
if (result.getResponseCode() == 200) {
var wooProducts = JSON.parse(result.getContentText());
Logger.log(result.getContentText());
}
然后我有另一個 for 迭代并從包含 wooProducts 的 id sku 和來自不同變數的 price 的新陣列進行迭代,該變數從我的作業表中獲取更新的價格:
var idLength = wooProducts.length;
Logger.log(idLength);
for (var i = 0; i < idLength; i ) {
var container = [];
Logger.log(i);
container.push({
id: wooProducts[i]["id"],
sku: wooProducts[i]["sku"],
price: data[i]["price"],
});
我不能確切地說出為什么它不起作用。我的意思是 for 回圈有效,它在每個回圈中推送 id、sku 和 price,只是 data[i] 只提供第一個 ? 物件?而不是像 wooProducts 那樣回圈,在每個回圈中添加 1。
我將復制 3 個回圈,因此它非常清晰,我不確定它是否已經清晰。
回圈 1:
[{"id":1622,"sku":"PD-1000-B","price":8145.9}]
回圈 2:
[{"id":1624,"sku":"PD-1007-A","price":8145.9}]
回圈 3:
[{"id":1625,"sku":"PD-1014","price":8145.9}]
如您所見,id sku 發生了變化,但價格沒有變化。
對于進一步的背景關系,我將包括在 For 之外宣告的資料變數:
const data = codigos.map(function(codigos, indice) {
return {
sku: codigos[0],
price: precios[indice][0]
}
})
//** 編輯:
我正在添加整個代碼,所以它可能更有意義嗎?
function getDataloopwoo() {
var ck = 'xxx'
var cs = 'xxx'
var website = 'xxx'
var optionsGet =
{
"method": "GET",
"Content-Type": "application/x-www-form-urlencoded;charset=UTF-8",
"muteHttpExceptions": true,
};
var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('PreciosBULK');
var codigos = sheet.getRange("A2:A").getValues();
var precios = sheet.getRange("B2:B").getValues();
var skuSearch = sheet.getRange("A2:A").getValues();
const data = codigos.map(function(codigos, indice) {
return {
sku: codigos[0],
price: precios[indice][0]
}
})
Logger.log(skuSearch)
for (let sku of skuSearch) {
var surl = website "/wp-json/wc/v3/products?consumer_key=" ck "&consumer_secret=" cs "&sku=" sku;
var url = surl
Logger.log(url)
var result = UrlFetchApp.fetch(url, optionsGet);
if (result.getResponseCode() == 200) {
var wooProducts = JSON.parse(result.getContentText());
Logger.log(result.getContentText());
}
var idLength = wooProducts.length;
Logger.log(idLength);
var container = [];
for (var i = 0; i < idLength; i ) {
Logger.log(i);
container.push({
id: wooProducts[i]["id"],
sku: wooProducts[i]["sku"],
price: data[i]["price"],
});
Logger.log(container);
var wooBatch = JSON.stringify(container);
Logger.log(wooBatch);
}
}
}
// 使用“解決”進行最終編輯:
所以我認為一次按 1 個 sku 詢問效率低下,所以現在我按 100 個詢問,并分頁一段時間,然后將 id、sku、price 保存到容器陣列中。我現在需要將容器陣列與具有更新價格的陣列進行比較,并形成一個帶有 id、sku 和更新價格的新陣列,我現在正在閱讀。代碼:
function getDataloopwoo() {
var ck = 'xx'
var cs = 'xx'
var website = 'xx'
var optionsGet =
{
"method": "GET",
"Content-Type": "application/x-www-form-urlencoded;charset=UTF-8",
"muteHttpExceptions": true,
};
var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('PreciosBULK');
var codigos = sheet.getRange("A2:A").getValues();
var precios = sheet.getRange("B2:B").getValues();
const data = codigos.map(function(codigos, indice) {
return {
sku: codigos[0],
price: precios[indice][0]
}
})
var container = [];
var surl = website "/wp-json/wc/v3/products?consumer_key=" ck "&consumer_secret=" cs "&per_page=100";
var url = surl
//Logger.log(url)
var result = UrlFetchApp.fetch(url, optionsGet);
var headers = result.getAllHeaders();
var total_pages = headers['x-wp-totalpages'];
var pages_count = 0;
while (pages_count < total_pages) {
if (result.getResponseCode() == 200) {
var wooProducts = JSON.parse(result.getContentText());
//Logger.log(result.getContentText());
}
for (var i = 0; i < wooProducts.length; i ) {
//Logger.log(i);
container.push({
id: wooProducts[i]["id"],
sku: wooProducts[i]["sku"],
price: wooProducts[i]["price"],
});
Logger.log(container);
}
pages_count ;
if (pages_count < total_pages){
var surl = website "/wp-json/wc/v3/products?consumer_key=" ck "&consumer_secret=" cs "&per_page=100" "&page=" (pages_count 1);
var url = surl
var result = UrlFetchApp.fetch(url, optionsGet);
Logger.log(url);
}
}
}
uj5u.com熱心網友回復:
您container在回圈的每次迭代中都重置陣列:
for (var i = 0; i < idLength; i ) {
var container = []; // <-----------------here
...
container.push({
...
我認為陣列應該在回圈之外定義:
var container = [];
for (var i = 0; i < idLength; i ) {
...
container.push({
...
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/394367.html
標籤:javascript 数组 WordPress的 谷歌应用程序脚本 求购
