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

时间:2015-09-28 19:51:00

标签: javascript arrays object

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

var elementsArr = [];
var elements = {
    polygon: 734,
    infoContent: "huhu",
    id: 0
}

我将拥有多个“元素”并将每个元素推送到“elementsArr”。

for(var i=0; i<20; i++){
   elements.id = id +=1;
   elementsArr.push(elements);
}

我现在的问题是如何在数组elementsArr中访问对象元素中的特定“id”并将其推送到另一个数组中。

我试过了,但它似乎没有起作用:

var ids = [];
for(var m=0; m<elementsArr.length; m++){
                if(elements.id == elementsArr[m]){
                ids.push(elements.id);
                }

我该怎么做?

3 个答案:

答案 0 :(得分:2)

您的代码一遍又一遍地将同一个对象推送到数组中。

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

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

for(var i=0; i<20; i++){
   elementsArr.push(Element(i));
}

如果会有很多元素,那么&#34; id&#34;值都是相对较小的数字,你最好存储元素,以便&#34; id&#34;也是指数:

for (var i = 0; i < 20; i++)
  elementsArr[i] = Element(i);

使用&#34; id&#34;获取元素17,然后:

var element17 = elementsArr[17];

但是,如果您确实想要搜索,可以使用.find()

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!
  }
}

你可以提取&#34; id&#34;通过简单调用.map()

从数组中获取值
var ids = elementsArr.map(function(elem) { return elem.id; });

或其他for循环:

var ids = [];
for (var i = 0; i < elementsArr.length; ++i)
  ids.push(elementsArr[i].id);

答案 1 :(得分:0)

有几种方法可以做到这一点。如果您能够使用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);
}

然后你可以用

查看
var elem = elementsLookup[2]; // Get the element with an id of 2.

答案 2 :(得分:0)

使用Array原型设计很容易。这是一个函数findById

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

您可以使用此函数从数组中接收任何ID,如果不存在,则返回false

elementsArr.findById(17);