循环遍历JavaScript数组并排除数组本身

时间:2016-08-29 21:27:43

标签: javascript arrays sorting

我正在尝试遍历从//中的JSON代码解析的JS对象:

/* ... */

我通过数组键将这些链接插入到图像对象中:

[this.props.dataPro.links]

结果我在返回对象的开头得到一个空的返回对象,当我在 "links" : [ "/static/media/0.jpg", "/static/media/1.jpg", "/static/media/1.jpg" ], 响应上执行console.log时,我似乎也返回了数组对象:

_getStaticImages() {
    let images = [this.props.dataPro.links]
    for (var key in images) {
      if (images.hasOwnProperty(key)) {
        var obj = images[key];
         for (var prop in obj) {
           if (obj.hasOwnProperty(prop)) {
            images.push({
            original: obj[prop],
            thumbnail:obj[prop]
          });
        }
      }
     }
   }


    return images;
  }

如何对数组进行循环排序并排除数组本身?

5 个答案:

答案 0 :(得分:3)

您正在将初始数组添加到输出let images = [this.props.dataPro.links]。相反,您可以在这里理想地使用Array.map:



var linkObj = {
  "links": [
    "/static/media/0.jpg",
    "/static/media/1.jpg",
    "/static/media/1.jpg"
  ]
};

function getStaticImages() {
  let output = linkObj.links.map(imgUrl => {
    return {
      original: imgUrl,
      thumbnail: imgUrl
    }
  });
  return output;
}

console.log(getStaticImages());




答案 1 :(得分:1)

我会使用http://code.google.com/apis/language/translate/overview.html并执行以下操作:

getStaticImages(imageArray) {
  return imageArray.map(function(img) {
    return {
      original: img.whateverPropMapsToOriginal,
      thumbnail: img.whateverPropMapsToThumbnail,
    }
  });
}

答案 2 :(得分:1)

var images = [];
for(var i = 0; i < this.props.dataPro.links.length;i++)
{
   images.push({
     original: this.props.dataPro.links[i],
     thumbnail: this.props.dataPro.links[i]
   });
}

答案 3 :(得分:1)

至于为什么首先将数组作为第一个元素,这一行:

let images = [this.props.dataPro.links]

在其中创建数组images,其中包含要迭代的第一个数组元素。

要创建一个空数组,请不要在其中添加任何值:

let images = []; // nothing inside

至于迭代自己。鉴于this.props.dataPro.links已经是数组,要迭代它,你应该这样:

var myArray = this.props.dataPro.links; // so we don’t need to type it later
var images = []; // we’re creating *empty* table
for (var i = 0; i < myArray.length; ++i) {
    console.log('Item', i, myArray[i]);
    images.push({
        original: item,
        thumbnail: item
    });
}

这是旧的做法。如果您从IE9支持,那么您可以使用函数Array.prototype.forEach

var images = [];
this.props.dataPro.links.foreach(function (item, index) {
    console.log('Item', index, item);
    images.push({
        original: item,
        thumbnail: item
    });
}

如果您希望选择中断迭代数组,请不要使用第二种解决方案。

答案 4 :(得分:0)

为什么不更改for循环?

for (let i = 1; i > obj.length; i++) {
  if (obj[i]) {
    images.push({
      original: obj[prop],
      thumbnail: obj[prop]
    })
  }
}

这会跳过数组的0th元素(您要跳过的对象),但仍会按下您想要的图像。