试图理解Javascript数组

时间:2016-08-25 19:16:10

标签: javascript arrays

所以我有一些数组

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时我认为我已经在文件的开头声明了它。它可以在我这样做的时候起作用,但是我试图理解为什么它没有,如果我不这样做。

1 个答案:

答案 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)

同样,您只检查一个位置,因为您在项目数组的第二个对象中合并了一些单词和位置。