【问题标题】:Javascript: pushing certain info to Array and getting info out of arrayJavascript:将某些信息推送到数组并从数组中获取信息
【发布时间】:2015-05-18 13:39:41
【问题描述】:

我对以下问题有疑问:

我为一个由棋子组成的游戏制作了一个棋盘。每一块都有自己的 x 和 y 坐标,还有一个布尔值,不管它是不是一条道路,它是否有一个炮塔。

所以这是数组:

var Array = [""];            
Array.push({
          x: i, 
          y: j,
          road: false,
          tower: null,
          id: "gamezone"+j+i
        });

现在,Array.push 在一个循环中找到,该循环提供信息:该部分有效。现在回答问题:

如何编辑数组中每个对象的某些信息? 例如,某些作品确实有路,所以我所做的是:

Array.push({road: true});

但这并没有做到。 我该怎么做?

第二个问题: 如果我想使用数组对象的一些信息,例如我必须用if (Array(road = true)) then ... 做一个 if-else 我认为这不是从数组中获取信息的正确方法,所以请帮助我。

如果你有任何关于这样做的文档,介意给一个链接吗?

非常感谢!

【问题讨论】:

  • 使用名称Array 作为变量名有点混乱,因为Array 也是[] 的JavaScript 类型。
  • Array 是实际数组对象的保留术语。具有该名称的变量会在该范围内覆盖它,这可能会导致代码稍后出现异常。我强烈建议更改变量名。
  • 我这里只是举个例子。我不正常使用它。
  • 对于棋盘游戏,二维数组会是更好的数据结构:var board = []; for(var i = 0; i < n; i++) {board[i] = []; for(var j = 0; j < n; j++) {board[i][j] = {}}},然后您可以使用board[x][y] 获取/设置值。
  • 已更新 jsfiddle.net/m654rf0s/1(控制台行已注释掉)

标签: javascript arrays if-statement get set


【解决方案1】:

要更改值,您可以使用 map 函数创建一个新数组:

var arr = []
arr.push(someObj)
arr = arr.map(function(x, i){
  if(someCondition) {
    x.road = true
  }
  return x
})

使用过滤功能获取值:

var arr = []
arr.push(someObj)
var sel = arr.filter(function(x, i){
  return someCondition
})

【讨论】:

    【解决方案2】:

    您尝试将对象推送到对象数组中,因此每当您尝试访问或更新这些数组的任何数组元素时,您都需要通过数组的索引来获取它-

    Array[0]
    

    它在数组Array 中的0 索引处为您提供对象 同样,每当您想更新某个数组项时,您首先需要找到它的索引,然后更新该数组项, 因此要查找索引对应的搜索项,您需要自定义查找功能。也可以使用数组对象的indexOf()。 像- Array.indexOf(ArrayItem); 并更新数组项,如下所示-

    Array[0]={
              x: i, 
              y: j,
              road: false,
              tower: null,
              id: "gamezone"+j+i
            };
    

    所以先尝试找到要更新的数组元素的索引,然后更新该数组项。

    【讨论】:

    • 你好!这几乎奏效了,但出于一个奇怪的原因,它并不总是正确的。介意检查我的小提琴吗? [链接]((jsfiddle.net/m654rf0s)?@Niles
    【解决方案3】:

    首先更改变量的名称。而且,按照惯例,以大写字母开头的变量用于构造函数。

    push() 在数组末尾添加一个新元素。当您尝试更改数组元素之一的一个属性时,您不应该使用 push。如果要更改数组中的一个对象元素,首先必须找到它。然后更改其属性。

    aray[indexOfObject] 将找到该对象。您必须知道对象所在的数字索引。如果您想使用命名键(而不是数字键)来引用对象,您应该使用一个对象来保存所有其他对象。但是,如果您知道索引,那么您就是这样做的:

    aray[indexOfObject].road = true;
    

    【讨论】:

    • 我试过这个,虽然它确实有效,但并不完全。你能检查一下我制作的小提琴:link吗?您可能会注意到,棕色的部分应该有 road = true,绿色的部分应该是 false。但是在控制台中你可以看到这并不总是正确的......@bpbutti
    【解决方案4】:

    据此Loop through an array in JavaScript

    您可以迭代您的数组并检查/修改属性

    for (var i = 0; i < yourArray.length; i++) {
        if (yourArray[i].x == 1 && yourArray[i].y == 2)
        {
           // Do something
        }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-05-27
      • 2021-03-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-10-03
      相关资源
      最近更新 更多