所以我有一些数组
var item = [{
name : "somename",
type1 : "wood",
location : "some location",
desc : "some description"
}, {
name : "somename",
type1 : "metal",
location : "somelocation",
desc : "some description"
}];
和
var shopState = 0;
var hasInv = [];
var pickedItem = [];
我假设我有2个空数组,最后一个。后来我尝试在函数中使用它们。
function shop() {
for (var i = 0; i < item.length; i++) {
if (item[i].location == "some location") {
//get all items at some location
hasInv[i] = item[i];
}
}
if (shopState == 1) {
var d = 1;
for (var i = 1; i < hasInv.length; i++) {
if (hasInv[i].type1 == 'wood') {
//get all wood items at some location
pickedItem[d] = hasInv[i];
d++;
console.log(pickedItem);
}
}
}
}
pickedItem
的最后一位返回undefined,除非我在pickedItem = [];
中声明shopState
时我认为我已经在文件的开头声明了它。它可以在我这样做的时候起作用,但是我试图理解为什么它没有,如果我不这样做。
答案 0 :(得分:0)
有几个问题:shopState
是否有条件通过?我没看到你在哪里增加shopState。您是否有直接设置索引而不是使用.push或.unshift的原因?也许是时间复杂性问题?我假设该功能的目的是遍历商店位置以找到匹配的位置,然后在该位置找到特定类型的所有项目?那是对的吗?如果这是真的,这里是解决方案:
function shop() {
for (var i = 0; i < item.length; i++) {
if (item[i].location == "some location") {
//get all items at some location
hasInv.push(item[i]);
//You weren't increment shopState
shopState++;
}
}
if (shopState == 1) {
//conditional now passes
//there is no need to set a additional index variable.
for (var i = 0; i < hasInv.length; i++) {
if (hasInv[i].type1 == 'wood') {
//get all wood items at some location
pickedItem.push(hasInv[i]);
console.log(pickedItem);
}
}
}
}
shop()
另请注意,您的条件会使您只能找到一个木材类型的项目。要更改此选项以便您的评论为真,并且您正在收集所有项目,只需将条件更改为:
if(shopState >= 1)
同样,您只检查一个位置,因为您在项目数组的第二个对象中合并了一些单词和位置。