我正在尝试遍历从//
中的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;
}
如何对数组进行循环排序并排除数组本身?
答案 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
元素(您要跳过的对象),但仍会按下您想要的图像。