计算json数组索引的数量

时间:2016-07-03 20:46:26

标签: javascript json

在我的javascript中,我有一个像这样的json,

var text = '{"employees":['+
    '{"firstName":"John","lastName":"Doe" },' +
    '{"firstName":"Anna","lastName":"Smith" },' +
    '{"firstName":"Peter","lastName":"Jones" }' +
']}';

我使用下面的代码来解析我的json。 obj1 = JSON.parse(text);

我想要做的是将json数组元素存储在js数组中(var chartData1 = [];)。我使用下面的循环在chartData []中存储json数组。通过将数组条件赋予i< 2,我能够成功地将json数组存储在chartData []中。

这是我的For循环,

for( i=0; i<=2; i++)
{ 
  chartData1.push( [ obj1.employees[i]['firstName'], obj1.employees[i]['lastName'] ])
}

我想做的是采取那个&#39; 2&#39;来自for循环中的条件语句,并将其替换为变量或表达式。我在许多线程中搜索,我发现我可以使用obj1.employees.length;(这样的事情),但这在我的情况下不起作用。由于我完全是js的新手,我想收到专家的一些帮助。我为我的英语感到抱歉。如果我在某个地方出错,请随意指出我。 提前谢谢。

3 个答案:

答案 0 :(得分:0)

obj1.employees.length应该没问题作为上限。我怀疑你使用了错误的比较运算符(<=而不是<)。看它工作:

&#13;
&#13;
var obj1 = { "employees": [
  { "firstName": "John", "lastName": "Doe" }, 
  { "firstName": "Anna", "lastName": "Smith" },
  { "firstName": "Peter", "lastName": "Jones" }
]};

var chartData1 = [];
for( i=0; i < obj1.employees.length; i++)
{ 
  chartData1.push( [ obj1.employees[i]['firstName'], obj1.employees[i]['lastName'] ])
}

console.log(JSON.stringify(chartData1));
&#13;
&#13;
&#13;

但是,有一个更好,更短的解决方案,利用Array.prototype.map函数:

&#13;
&#13;
var obj1 = { "employees": [
  { "firstName": "John", "lastName": "Doe" }, 
  { "firstName": "Anna", "lastName": "Smith" },
  { "firstName": "Peter", "lastName": "Jones" }
]};

var chartData1 = obj1.employees.map(e => [e.firstName, e.lastName]);

console.log(JSON.stringify(chartData1));
&#13;
&#13;
&#13;

答案 1 :(得分:0)

这也是另一种解决方案:

QGLWidget

答案 2 :(得分:0)

解析text后,您将获得一个JSON对象,其唯一属性为employees。基本上,如果您执行var parsedContents = JSON.parse(text);,则parsedContents的值为:

{
    "employees": [
        { "firstName": "John", "lastName": "Doe" }, 
        { "firstName": "Anna", "lastName": "Smith" },
        { "firstName": "Peter", "lastName": "Jones" }
    ]
}

因此,您可以使用employees获取JSON.parse(text).employees数组,并使用Array.prototype.forEach和朋友遍历数组。以下是最终答案:

var employees = JSON.parse(text).employees;

employees.forEach(function (employee) {
    chartData1.push(employee.firstName, employee.lastName);
});