如何对javascript对象的属性执行计算并将其打印出来

时间:2015-09-09 14:44:42

标签: javascript arrays object

我还在学习javascript,这是 NOT 一个家庭作业问题 我有一个对象集合

var x = [{name:'Ann',age:1,ending:'years old'},  
{name:'Bob',age:2,ending:'years old'},  
{name:'Cat',age:3,ending:'years old'},  
{name:'Dog',age:10,ending:'years old'},  
{name:'Fly',age:5,ending:'years old'}]

我想知道如何:
1,对所有' age'执行计算,例如age = age + 1
2,将计算数据放入对象集合// x.push(age)我猜? 3,打印出来' x'这样:

    console.log(x[name]+' is '+x[age]+''+x[ending]+[calculations to age])
    //Ann is 1 years old2
    //Bob is 2 years old3....

我知道这句话没有意义,但这并不重要。

我的尝试:

var arr = '';

for (var property in x){
arr += x[property]+'\t';
}

var newArr = arr.split('\t')
,calculatedData = newArr[1]+1 ;
newArr.push(calculatedData) ;  
console.log(newArr[0]+' is '+newArr[1]+''+newArr[2]+calculatedData );

2 个答案:

答案 0 :(得分:0)

  

1,对所有'年龄'进行计算,例如年龄=年龄+ 1

您正在做的是循环遍历数组。在JavaScript中有很多方法可以做到这一点;请参阅this answer以获取详细信息。在现代JavaScript中,forEach很常见:

x.forEach(function(entry) {
    entry.age = entry.age + 1;
    // more commonly written like this:
    // ++entry.age;
});

注意每个数组条目如何作为第一个参数提供给我们的回调函数。

或者可选地,古老的for循环:

var index;
for (index = 0; index < x.length; ++index) {
    x[index].age = x[index].age + 1;
    // more commonly:
    // ++x[index].age;
}

请注意我们必须按索引x[index]查找条目。

  

2,将计算数据放入对象集合// x.push(age)我猜?

好吧,如果我们在对象上更新age,它就已经存在了。或者,我们可以使用map创建一个带有结果的 new 数组:

var newArray = x.map(function(entry) {
    return entry.age + 1;
});

现在,newArray是一个数字数组,是每个年龄加1的结果。

但根据您的问题#3,您更有可能想要添加具有更新年龄的新媒体资源:

x.forEach(function(entry) {
    entry.updatedAge = entry.age + 1;
});
  

3,以这种方式打印'x':

那是另一个循环:

x.forEach(function(entry) {
    console.log(entry.name + " is " + entry.age + " " + entry.ending + " " + entry.updatedAge);
});

直播示例:

var x = [{name:"Ann",age:1,ending:'years old'},  
{name:"Bob",age:2,ending:'years old'},  
{name:"Cat",age:3,ending:'years old'},  
{name:"Dog",age:10,ending:'years old'},  
{name:"Fly",age:5,ending:'years old'}];

x.forEach(function(entry) {
  entry.updatedAge = entry.age + 1;
});

x.forEach(function(entry) {
  snippet.log(entry.name + " is " + entry.age + " " + entry.ending + " " + entry.updatedAge);
});
<!-- Script provides the `snippet` object, see http://meta.stackexchange.com/a/242144/134069 -->
<script src="http://tjcrowder.github.io/simple-snippets-console/snippet.js"></script>

当然,您可以在一个循环中完成所有操作:

x.forEach(function(entry) {
  snippet.log(entry.name + " is " + entry.age + " " + entry.ending + " " + (entry.age + 1));
  // Note the () ----------------------------------------------------------^-------------^
});

直播示例:

var x = [{name:"Ann",age:1,ending:'years old'},  
{name:"Bob",age:2,ending:'years old'},  
{name:"Cat",age:3,ending:'years old'},  
{name:"Dog",age:10,ending:'years old'},  
{name:"Fly",age:5,ending:'years old'}];

x.forEach(function(entry) {
  snippet.log(entry.name + " is " + entry.age + " " + entry.ending + " " + (entry.age + 1));
});
<!-- Script provides the `snippet` object, see http://meta.stackexchange.com/a/242144/134069 -->
<script src="http://tjcrowder.github.io/simple-snippets-console/snippet.js"></script>

答案 1 :(得分:0)

遍历集合并按每次迭代执行计算:

var x = [{name:"Ann",age:1,ending:'years old'},  
{name:"Bob",age:2,ending:'years old'},  
{name:"Cat",age:3,ending:'years old'},  
{name:"Dog",age:10,ending:'years old'},  
{name:"Fly",age:5,ending:'years old'}];

for(var i = 0; i<x.length; i++){
   //perform calc on age
   x[i].age = x[i].age + 1;
   //print info in object
   console.log(x[i].name+' is '+x[i].age+' '+x[i].ending); 
}