试图理解Javascript数组
所以我有一些数组试图理解Javascript数组,javascript,arrays,Javascript,Arrays,所以我有一些数组 var item = [{ name : "somename", type1 : "wood", location : "some location", desc : "some description" }, { name : "somename", type1 : "metal", location : "somelocation", desc : "some description" }]; 及 我假设最后
var item = [{
name : "somename",
type1 : "wood",
location : "some location",
desc : "some description"
}, {
name : "somename",
type1 : "metal",
location : "somelocation",
desc : "some description"
}];
及
我假设最后一个数组有两个空数组。稍后,我尝试在函数中使用这些
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);
}
}
}
}
功能商店(){
对于(变量i=0;i
带有
pickedItem
的最后一位返回未定义,除非我声明pickedItem=[]
在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()
同样,您只检查了一个位置,因为您已将单词some和location组合在items数组的第二个对象中。您应该使用
var d
为什么,在第二个for
循环中,您是从1
开始的?使用您提供的代码,它将永远不会运行循环体(因为hasInv
在索引0
处只有一个项目,您对pickedItem
还做了什么?您能把整个文件作为一个整体显示给我们吗,包括对商店的调用hasInv[i].type
,而对象的属性是type1
。如果您解决了索引和属性名称的问题,它就可以正常工作。但即使没有这些,未定义的pickedItem
也没有问题
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)