我有一个像这样的JSON:
var arrStages = [
{ "strID" : "ID-0001" , "intStageNum" : 1 , "strNumOfDays": 1 },
{ "strID" : "ID-0003" , "intStageNum" : 3 , "strNumOfDays": 14},
{ "strID" : "ID-0002" , "intStageNum" : 2 , "strNumOfDays": 3 },
{ "strID" : "ID-0006" , "intStageNum" : 6 , "strNumOfDays": 3 },
{ "strID" : "ID-0004" , "intStageNum" : 4 , "strNumOfDays": 3 },
{ "strID" : "ID-0005" , "intStageNum" : 5 , "strNumOfDays": 3 },
];
如何获得每个属性的特定属性(让我们说我想要strNumOfDays)?我必须使用$ .each()?
答案 0 :(得分:2)
我必须使用$ .each()吗?
你需要一些类型的循环结构,是的。例如,for
循环,或Array.prototype
的功能,或ES2015(又名" ES6")以及后来的for-of
循环,或者是,你可以使用jQuery' $.each
或$.map
。例如,我们可以使用arrStages.map
获取这些值的数组:
var days = arrStages.map(function(entry) {
return entry.strNumOfDays;
});
或者在ES2015 +中:
let days = arrStages.map(entry => entry.strNumOfDays);
示例(在ES5中):
var arrStages = [
{ "strID" : "ID-0001" , "intStageNum" : 1 , "strNumOfDays": 1 },
{ "strID" : "ID-0003" , "intStageNum" : 3 , "strNumOfDays": 14},
{ "strID" : "ID-0002" , "intStageNum" : 2 , "strNumOfDays": 3 },
{ "strID" : "ID-0006" , "intStageNum" : 6 , "strNumOfDays": 3 },
{ "strID" : "ID-0004" , "intStageNum" : 4 , "strNumOfDays": 3 },
{ "strID" : "ID-0005" , "intStageNum" : 5 , "strNumOfDays": 3 },
];
var days = arrStages.map(function(entry) {
return entry.strNumOfDays;
});
console.log(days);

This question's answers涵盖了在JavaScript中循环遍历数组的众多选项。
在ES2015及更高版本中,如果您不需要数组,但只需要循环显示数值,那么for-of
循环就像这样:
for (let entry of arrStages) {
// Use entry.strNumOfDays here...
}
答案 1 :(得分:1)
您还可以使用Javascript' map()
或forEach()
,因为它是一个数组。它比$.each()
更直接。
var arrStages = [
{ "strID" : "ID-0001" , "intStageNum" : 1 , "strNumOfDays": 1 },
{ "strID" : "ID-0003" , "intStageNum" : 3 , "strNumOfDays": 14},
{ "strID" : "ID-0002" , "intStageNum" : 2 , "strNumOfDays": 3 },
{ "strID" : "ID-0006" , "intStageNum" : 6 , "strNumOfDays": 3 },
{ "strID" : "ID-0004" , "intStageNum" : 4 , "strNumOfDays": 3 },
{ "strID" : "ID-0005" , "intStageNum" : 5 , "strNumOfDays": 3 },
];
// map()
var newArray = arrStages.map(function(string) {
return string.strNumOfDays;
});
console.log(newArray);
// map()
arrStages.forEach(function(string) {
console.log(string.strNumOfDays);
});
// jQuery each()
$.each(arrStages, function(key) {
console.log(arrStages[key].strNumOfDays);
});

<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
&#13;
答案 2 :(得分:1)
Array.prototype.reduce()
也可以使用。
它通过接收两个参数来工作 - 一个为数组上的每次迭代调用的函数和一个初始值。在第一次迭代中,初始值作为第一个参数(memo
)传递给提供的函数。第二个参数是当前迭代的数组元素(curr
)。我们只需在memo
中推送所需的属性,然后返回memo
。需要返回它,因为reduce()
使用返回的值作为下一次迭代的memo
。基本上,reduce()
的第二个参数是一个空数组,我们在迭代之间传递新值时将其推送。该数组在最后一次迭代时返回并存储在days
变量中。
var arrStages = [
{ "strID" : "ID-0001" , "intStageNum" : 1 , "strNumOfDays": 1 },
{ "strID" : "ID-0003" , "intStageNum" : 3 , "strNumOfDays": 14},
{ "strID" : "ID-0002" , "intStageNum" : 2 , "strNumOfDays": 3 },
{ "strID" : "ID-0006" , "intStageNum" : 6 , "strNumOfDays": 3 },
{ "strID" : "ID-0004" , "intStageNum" : 4 , "strNumOfDays": 3 },
{ "strID" : "ID-0005" , "intStageNum" : 5 , "strNumOfDays": 3 },
];
var days = arrStages.reduce(function (memo, curr) {
memo.push(curr.strNumOfDays);
return memo;
}, []);
console.log(days);
&#13;
@nnnnnn说map()
更直截了当。这是真的,但它的灵活性稍差。例如,如果您想仅 strNumOfDays
不是3
的值
var arrStages = [
{ "strID" : "ID-0001" , "intStageNum" : 1 , "strNumOfDays": 1 },
{ "strID" : "ID-0003" , "intStageNum" : 3 , "strNumOfDays": 14},
{ "strID" : "ID-0002" , "intStageNum" : 2 , "strNumOfDays": 3 },
{ "strID" : "ID-0006" , "intStageNum" : 6 , "strNumOfDays": 3 },
{ "strID" : "ID-0004" , "intStageNum" : 4 , "strNumOfDays": 3 },
{ "strID" : "ID-0005" , "intStageNum" : 5 , "strNumOfDays": 3 },
];
var mappedDays = arrStages.map(function (elem) {
if (elem.strNumOfDays !== 3) {
return elem.strNumOfDays;
}
});
var reducedDays = arrStages.reduce(function (memo, curr) {
if (curr.strNumOfDays !== 3) {
memo.push(curr.strNumOfDays);
}
return memo;
}, []);
console.log("map", mappedDays);
console.log("reduce", reducedDays);
&#13;
请注意map()
始终保存返回的值。如果没有返回任何内容,则会保存undefined
。使用reduce()
,您可以控制确切添加的内容。
免责声明:我知道这不是问题的必要条件,我并不是说reduce()
更好,我只想展示它的好处。
答案 3 :(得分:0)
您可以使用Array#map
关闭所需密钥。
function getValues(key) {
return function (object) {
return object[key];
};
}
var arrStages = [{ strID: "ID-0001" , intStageNum: 1 , strNumOfDays: 1 }, { strID: "ID-0003" , intStageNum: 3 , strNumOfDays: 14}, { strID: "ID-0002" , intStageNum: 2 , strNumOfDays: 3 }, { strID: "ID-0006" , intStageNum: 6 , strNumOfDays: 3 }, { strID: "ID-0004" , intStageNum: 4 , strNumOfDays: 3 }, { strID: "ID-0005" , intStageNum: 5 , strNumOfDays: 3 }];
console.log(arrStages.map(getValues('strNumOfDays')));
&#13;
.as-console-wrapper { max-height: 100% !important; top: 0; }
&#13;
答案 4 :(得分:0)
这是解决您问题的ES6解决方案:
arrStages.forEach((arrStage) => {
console.log(arrStage["strNumOfDays"]);
});
我认为这就是你想要的。
我希望它有所帮助。