是否可以在javascript中重写数组中没有for循环的所有值?

时间:2015-05-15 14:29:18

标签: javascript arrays rewrite

假设我们有一个数组(myArray),其数据如下:

0: myArray
   content: 'something'
   date: '15.5.2015'
   name: 'Abc'
1: myArray
   content: 'text'
   date: '15.5.2015'
   name: 'Bla'
2: etc ...

现在重写这个数组中一个对象属性的所有值(例如空字符串)(例如:' content')我会像这样使用for循环:

for(var i = 0; i < myArray.length; i++){
  myArray[i].content = '';
}

因此结果如下:

0: myArray
   content: ''
   date: '15.5.2015'
   name: 'Abc'
1: myArray
   content: ''
   date: '15.5.2015'
   name: 'Bla'
2: etc ...

我的问题是:如果不在javascript中使用循环,可以做同样的结果吗?像这样:

myArray[all].content.RewriteInto('');

Tnx for ideas。

3 个答案:

答案 0 :(得分:2)

你做的任何事情都会以某种方式循环。但是,不必循环......

因为我们现在有功能数组方法!您可能正在寻找mapreduce,可能两者都有,因为您想要转换(映射)每个元素和/或将它们合并为一个(减少)。

例如,我们可以使用以下内容获取您的数据并返回包含所有content字段的字符串:

&#13;
&#13;
var data = [{
  content: 'something',
  date: '15.5.2015',
  name: 'Abc'
}, {
  content: 'text',
  date: '15.5.2015',
  name: 'Bla'
}];

var result = data.map(function(it) {
  return it.content;
}).join(' ');

document.getElementById('r').textContent = JSON.stringify(result);
&#13;
<pre id="r"></pre>
&#13;
&#13;
&#13;

要从每个项目中删除content字段,而不修改输入,您可以:

&#13;
&#13;
var data = [{
  content: 'something',
  date: '15.5.2015',
  name: 'Abc'
}, {
  content: 'text',
  date: '15.5.2015',
  name: 'Bla'
}];

var result = data.map(function(it) {
  return {date: it.date, name: it.name};
});

document.getElementById('r').textContent = JSON.stringify(result);
&#13;
<pre id="r"></pre>
&#13;
&#13;
&#13;

答案 1 :(得分:1)

您应该查看map function。 像这样使用它:

myArray.map(function (data) {
    return data.content = 'value';
}

答案 2 :(得分:1)

由于对你的问题的第一个评论指出你总是必须使用一个循环,但你可以使用原型来修补数组:

Array.prototype.rewriteInto = function(key, rewriteVal){
  for(var k in this){
    this[k][key] = rewriteVal;
  }
};

var testData = new Array();
testData.push({
  content: 'something',
  date: '15.5.2015',
  name: 'Abc',
});

testData.push({
  content: 'something',
  date: '15.5.2015',
  name: 'bla',
});

console.log(testData);

testData.rewriteInto('content', '');
console.log(testData);

因此,您不必在您想要使用此功能时重写循环。

请参阅example