我有一组数据。你会在JavaScript中使用for循环遍历这些数据吗?
var model = ({
"DettolRadiance":
{
"Values": [{ "GRPsValue": 66, "MonthOfSale": "Jan" },
{ "GRPsValue": 100, "MonthOfSale": "Feb" },
{ "GRPsValue": 250, "MonthOfSale": "March" },
{ "GRPsValue": 100, "MonthOfSale": "April" }],
"Key": "DettolRadiance"
},
"DettolSkinCare":
{
"Values": [{ "GRPsValue": 487, "MonthOfSale": "Jan" },
{ "GRPsValue": 450, "MonthOfSale": "Feb" },
{ "GRPsValue": 300, "MonthOfSale": "March" },
{ "GRPsValue": 400, "MonthOfSale": "April" }],
"Key": "DettolSkinCare"
},
"DettolToiletSoaps":
{
"Values": [{ "GRPsValue": 64, "MonthOfSale": "Feb" },
{ "GRPsValue": 0, "MonthOfSale": "Jan" },
{ "GRPsValue": 70, "MonthOfSale": "March" },
{ "GRPsValue": 150, "MonthOfSale": "April" }],
"Key": "DettolToiletSoaps"
}
});
这是我尝试过的代码。
var DataSet = [];
for (var i = 0; i < model[0].DettolRadiance.Values.length; i++) {
DataSet.push({ 'x': model[0].DettolRadiance.Values[i].MonthOfSale, 'y': model[0].DettolRadiance.Values[i].GRPsValue });
}
for (var i = 0; i < model[0].DettolSkinCare.Values.length; i++) {
DataSet.push({ 'x': model[0].DettolSkinCare.Values[i].MonthOfSale, 'y': model[0].DettolSkinCare.Values[i].GRPsValue });
}
for (var i = 0; i < model[0].DettolToiletSoaps.Values.length; i++) {
DataSet.push({ 'x': model[0].DettolToiletSoaps.Values[i].MonthOfSale, 'y': model[0].DettolToiletSoaps.Values[i].GRPsValue });
}
但是我只能检索Values.I想要根据3个键检索值。这些是DettolRadiance,DettolSkinCare,DettolToiletSoaps.So每个键应该有4个相应的值。我想我需要添加另一个for循环。但是我没有得到确切的语法。任何人都可以帮助..
答案 0 :(得分:0)
我认为你的代码应该是
var model = ({
"DettolRadiance":
{
"Values": [{ "GRPsValue": 66, "MonthOfSale": "Jan" },
{ "GRPsValue": 100, "MonthOfSale": "Feb" },
{ "GRPsValue": 250, "MonthOfSale": "March" },
{ "GRPsValue": 100, "MonthOfSale": "April" }],
"Key": "DettolRadiance"
},
"DettolSkinCare":
{
"Values": [{ "GRPsValue": 487, "MonthOfSale": "Jan" },
{ "GRPsValue": 450, "MonthOfSale": "Feb" },
{ "GRPsValue": 300, "MonthOfSale": "March" },
{ "GRPsValue": 400, "MonthOfSale": "April" }],
"Key": "DettolSkinCare"
},
"DettolToiletSoaps":
{
"Values": [{ "GRPsValue": 64, "MonthOfSale": "Feb" },
{ "GRPsValue": 0, "MonthOfSale": "Jan" },
{ "GRPsValue": 70, "MonthOfSale": "March" },
{ "GRPsValue": 150, "MonthOfSale": "April" }],
"Key": "DettolToiletSoaps"
}
});
var DataSet = [];
for (var i = 0; i < model.DettolRadiance.Values.length; i++) {
DataSet.push({ 'x': model.DettolRadiance.Values[i].MonthOfSale, 'y': model.DettolRadiance.Values[i].GRPsValue });
}
for (var i = 0; i < model.DettolSkinCare.Values.length; i++) {
DataSet.push({ 'x': model.DettolSkinCare.Values[i].MonthOfSale, 'y': model.DettolSkinCare.Values[i].GRPsValue });
}
for (var i = 0; i < model.DettolToiletSoaps.Values.length; i++) {
DataSet.push({ 'x': model.DettolToiletSoaps.Values[i].MonthOfSale, 'y': model.DettolToiletSoaps.Values[i].GRPsValue });
}
&#13;
答案 1 :(得分:-1)
我编写了两个函数,允许您迭代数组/对象的每个单独成员或对象和数组的组合(就像你的一样)。
首先,我编写了一个函数来迭代array/object
的每个成员。但是这个函数还使用另一个函数来检查对象是object object
还是object array
,因为我们应该对这两种类型稍微使用不同的技术。
function _recursive(obj, callback)
{
var len;
var objectKeys;
var i = 0;
if(isArrayOrObject(obj) === 'array')
{
len = obj.length;
iterator = i;
}
else if(isArrayOrObject(obj) === 'object')
{
len = Object.keys(obj).length;
objectKeys = Object.keys(obj);
}
for(i = 0; i < len; i++)
{
var currentElement;
if(isArrayOrObject(obj) === 'array')
{
currentElement = obj[i];
}
else if(isArrayOrObject(obj) === 'object')
{
currentElement = obj[objectKeys[i]];
}
callback(currentElement);
if(isArrayOrObject(currentElement) !== false)
{
_recursive(currentElement, function(element){
callback(element);
});
}
}
}
此函数检查对象的类型,如果两者都不为则返回false。
function isArrayOrObject(inp)
{
if(typeof inp !== 'object') return false;
if( Object.prototype.toString.call( inp ) === '[object Array]' )
{
return "array";
}
else
{
return "object";
}
}
以下是我们称之为的方式。我们将回调传递给我们的函数,以应用于数组的每个成员。
_recursive(model, function(element){
if(typeof element !== 'object')
{
console.log(element);
}
});
这会将对象循环到最深的根。
答案 2 :(得分:-1)
您可以使用for..in
循环使用对象特性。
for (var prop in obj) {
if( obj.hasOwnProperty( prop ) ) {
console.log("o." + prop + " = " + obj[prop]);
}
}
hasOwnProperty
确保它是一个“真正的”属性,如果有人与Object.prototype
进行僧侣合作,我们就不会被绊倒。
要获取包含每个产品的已收集MonthOfSale
和GRPsValue
的数组,您将for..in
使用内部循环Values
。
function proccessData(data){
var result = [];
for (var prop in data) {
if( data.hasOwnProperty( prop ) ) {
(function(product){
var val, i, len = product.Values.length;
for (i = 0; i < len; i++){
val = product.Values[i];
result.push({
x: val['MonthOfSale'],
y: val['GRPsValue']
});
}
}(data[prop]));
}
}
return result;
}
jsFiddle http://jsfiddle.net/maxcal/9uoqm6f8/3/
PS :(已添加)
使用文字符号创建对象时,请不要将其包装在parens中:
var model = {}; // good
var model = ({}); // bad, is there something missing here?
虽然结果是一样的,但它很混乱,因为看起来你可能打算将文字传递给一个函数。
编辑。这与您接受的答案相同。
var data_set = [];
for (var prop in model) {
if( model.hasOwnProperty( prop ) ) {
data_set.push({ values: model[prop].Values, key: model[prop].Key })
}
}