Javascript 如何访问数组中的对象中的数组?

Javascript 如何访问数组中的对象中的数组?,javascript,arrays,object,Javascript,Arrays,Object,我有一个对象和一个数组: var elementsArr = []; var elements = { polygon: 734, infoContent: "huhu", id: 0 } 我将有多个“元素”,并将每个元素推入“elementsArr” for(var i=0;i您的代码一次又一次地将同一对象推送到数组上 解决此问题的一种方法是编写一个函数以获取新元素: function Element(id) { return { polygon: 734

我有一个对象和一个数组:

var elementsArr = [];
var elements = {
    polygon: 734,
    infoContent: "huhu",
    id: 0
}
我将有多个“元素”,并将每个元素推入“elementsArr”


for(var i=0;i您的代码一次又一次地将同一对象推送到数组上

解决此问题的一种方法是编写一个函数以获取新元素:

function Element(id) {
  return {
    polygon: 734,
    infoContent: "huhu",
    id: id
  };
}

for(var i=0; i<20; i++){
   elementsArr.push(Element(i));
}
但是,如果确实要搜索,可以使用
.find()

或者一个简单的循环:

for (var i = 0; i < elementsArr.length; ++i) {
  if (elementsArr[i].id === 17) {
    // found it!
  }
}
或另一个
循环:

var ids = [];
for (var i = 0; i < elementsArr.length; ++i)
  ids.push(elementsArr[i].id);
varids=[];
对于(变量i=0;i
有几种方法可以做到这一点。如果你能够在
ES6
中工作,那么
WeakMap
将是非常好的选择

但是,我将给您一个
ES5

选项1循环浏览数据

如果您不经常访问数据,那么循环访问可能是最好的选择

选项2设置您自己的索引

另一方面,如果需要更快的查找,可以设置自己的单独索引来查找

var elementsLookup = {};  // Create an empty object.
for(var i=0; i<20; i++){
   elements.id = id +=1;
   elementsLookup[id] = elements;  // Stash off a copy
   elementsArr.push(elements);
}

使用阵列原型制作很容易。下面是一个函数
findById

Array.prototype.findById = function(id){
    for(var x = 0 ; x < this.length; x++){
        if(this[x].id == id){
            return this[x];   
        }
    }
    return false;
}

@CollinD我在代码中到底在哪里使用它?这只是访问数组元素成员的语法。您的代码(正如Pointy所指出的)Mr@Pointy有更重要的问题,如果我想在不查找的情况下将所有“id”添加到另一个数组中怎么办?
var element17 = elementsArr.find(function(elem) { return elem.id === 17; });
for (var i = 0; i < elementsArr.length; ++i) {
  if (elementsArr[i].id === 17) {
    // found it!
  }
}
var ids = elementsArr.map(function(elem) { return elem.id; });
var ids = [];
for (var i = 0; i < elementsArr.length; ++i)
  ids.push(elementsArr[i].id);
var elementsLookup = {};  // Create an empty object.
for(var i=0; i<20; i++){
   elements.id = id +=1;
   elementsLookup[id] = elements;  // Stash off a copy
   elementsArr.push(elements);
}
var elem = elementsLookup[2]; // Get the element with an id of 2.
Array.prototype.findById = function(id){
    for(var x = 0 ; x < this.length; x++){
        if(this[x].id == id){
            return this[x];   
        }
    }
    return false;
}
elementsArr.findById(17);