我正在撰寫一段代碼來接受一個陣列,該陣列包含多個具有“類別”、“專案名稱”和“Onsale”屬性的物件,然后將其重新組織成一個物件,該物件將“類別”屬性中的專案納入其中如果列出的物件中的“onSale”屬性為真,則屬性包含來自“itemNames”屬性的值,并在該值旁邊添加一個附加 ($)。在撰寫和測驗代碼后,它在第 13 行一直回傳“無法讀取未定義的屬性 '0'”,我試圖在其中呼叫陣列中的 [i] 物件。我的陣列是在該索引值處定義的,所以我不確定發生了什么。如果我的代碼看起來很業余,我很抱歉我是 javascript 新手。任何幫助將不勝感激。
我試圖拆分任務;例如,而不是:
myObj = items[i]["category"][0];
我寫:
myObj = items[i]["category"][0];
myObj.item[i] = ["category"][0];
我試圖為我的 for 回圈切換我的初始條件;例如,i = 1而不是i = 0
我嘗試輸入一個不同的陣列,例如:myArray = [1, 2, 3, 5]但我最終得到了同樣的錯誤,但在不同的位置
這是我的代碼:
function organizeItems(items) {
let myObj = {}
for (let i = 0; i < items.length; i ) {
if (items[i]["category"][0] in myObj === false) {
if (items[i]["onSale"] === true) {
myObj = items[i]["category"][0];
myObj.items[i]["category"][0] = [];
myObj.items[i]["category"][0].push(items[i]["itemName"][0] '($)');
}
else {
myObj = items[i]["category"][0];
myObj.items[i]["category"][0] = [];
myObj.items[i]["category"][0].push(items[i]["itemName"][0]);
}
}
else {
if (items[i]["onSale"] === true) {
myObj.items[i]["category"][0].push(items[i]["itemName"][0] '($)');
}
else {
myObj.items[i]["category"][0].push(items[i]["itemName"][0]);
}
}
}
console.log(myObj);
return myObj;
}
var iten = [1, 2, 3, 4, 5, 6];
var itemData = [
{ category: 'fruit', itemName: 'apple', onSale: false },
{ category: 'canned', itemName: 'beans', onSale: false },
{ category: 'canned', itemName: 'corn', onSale: true },
{ category: 'frozen', itemName: 'pizza', onSale: false },
{ category: 'fruit', itemName: 'melon', onSale: true },
{ category: 'canned', itemName: 'soup', onSale: false },
];
organizeItems(itemData);
這是我收到的錯誤:
/usr/src/app/test/unit_tests_spec.js:19
myObj.items[i]["category"][0] = [];
^
TypeError: Cannot read property '0' of undefined
at organizeItems (/usr/src/app/test/unit_tests_spec.js:20:12)
at Object.<anonymous> (/usr/src/app/test/unit_tests_spec.js:47:1)
at Module._compile (module.js:653:30)
at loader (/usr/src/app/node_modules/babel-register/lib/node.js:144:5)
at Object.require.extensions.(anonymous function) [as .js] (/usr/src/app/node_modules/babel- register/lib/node.js:154:7)
at Module.load (module.js:566:32)
at tryModuleLoad (module.js:506:12)
at Function.Module._load (module.js:498:3)
at Module.require (module.js:597:17)
at require (internal/module.js:11:18)
at /usr/src/app/node_modules/mocha/lib/mocha.js:231:27
at Array.forEach (<anonymous>)
at Mocha.loadFiles (/usr/src/app/node_modules/mocha/lib/mocha.js:228:14)
at Mocha.run (/usr/src/app/node_modules/mocha/lib/mocha.js:514:10)
at Object.<anonymous> (/usr/src/app/node_modules/mocha/bin/_mocha:480:18)
at Module._compile (module.js:653:30)
at Object.Module._extensions..js (module.js:664:10)
at Module.load (module.js:566:32)
at tryModuleLoad (module.js:506:12)
at Function.Module._load (module.js:498:3)
at Function.Module.runMain (module.js:694:10)
at startup (bootstrap_node.js:204:16)
at bootstrap_node.js:625:3
npm ERR! Test failed. See above for more details.
uj5u.com熱心網友回復:
嘗試這個,
function organizeItems(items) {
let myObj_arr = [];
for (let i = 0; i < items.length; i ) {
if (items[i]["onSale"] === true) {
myObj_arr.push({"itemName": items[i]["category"]});
}
}
console.log(myObj_arr);
return myObj_arr;
}
var iten = [1, 2, 3, 4, 5, 6];
var itemData = [
{ category: 'fruit', itemName: 'apple', onSale: false },
{ category: 'canned', itemName: 'beans', onSale: false },
{ category: 'canned', itemName: 'corn', onSale: true },
{ category: 'frozen', itemName: 'pizza', onSale: false },
{ category: 'fruit', itemName: 'melon', onSale: true },
{ category: 'canned', itemName: 'soup', onSale: false },
];
organizeItems(itemData);
uj5u.com熱心網友回復:
我解決了你的問題。
解釋
items[i]["category"][0] 的值字母第一個字符。
因此,如果您想在 myObj 上放置類別字母。
mbObj.items[i]["category"][0] 的語法不正確。
myObj[items[i]["category"][0]] 是正確的。
如果你想要類別的完整字母。不是第一個字符。
myObj[items[i]["category"]] = []; <這段代碼的意思是=> myObj = { [items[i]["category"]] : []}
如果你想方便粘貼。
https://bokboot.net/read?id=48&key=44426bed-78e6-49b0-80c1-9d8a13410523
function organizeItems(items) {
let myObj = {}
for(let i = 0; i < items.length; i ) {
if(items[i]["category"] in myObj === false) {
if(items[i]["onSale"] === true) {
myObj[items[i]["category"]] = [];
myObj[items[i]["category"]].push(items[i]["itemName"] '($)');
}
else {
myObj[items[i]["category"]] = [];
myObj[items[i]["category"]].push(items[i]["itemName"]);
}
}
else {
if(items[i]["onSale"] === true) {
myObj[items[i]["category"]].push(items[i]["itemName"] '($)');
}
else {
myObj[items[i]["category"]].push(items[i]["itemName"]);
}
}
}
console.log(myObj);
return myObj;
}
var iten = [1,2,3,4,5,6];
var itemData = [
{ category: 'fruit', itemName: 'apple', onSale: false },
{ category: 'canned', itemName: 'beans', onSale: false },
{ category: 'canned', itemName: 'corn', onSale: true },
{ category: 'frozen', itemName: 'pizza', onSale: false },
{ category: 'fruit', itemName: 'melon', onSale: true },
{ category: 'canned', itemName: 'soup', onSale: false },
];
organizeItems(itemData);
uj5u.com熱心網友回復:
您可能向函式發送了一個從未實體化的 items 陣列。嘗試在 let myObject = {} 之前將專案記錄到控制臺,您可能會發現專案未定義,以證明我的懷疑。
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/532899.html
上一篇:當回圈命中某些元素時,你將如何遍歷一個陣列,在全域范圍內增加一個變數?
下一篇:For回圈、通配符和條件陳述句
