可以重写数组中的所有值,而无需在JavaScript中循环



让我们假设我们有一个带有这样的数据的数组(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(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中使用loop的情况下可以执行相同的结果吗?这样的东西:

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

tnx的想法。

您所做的任何事情最终都会以某种方式循环。但是, you 不必循环...

因为我们现在有功能数组方法!您可能正在寻找mapreduce,也许是两者都在寻找(映射)每个元素和/或将它们组合成一个(降低)。

作为一个例子,我们可以使用您的数据并使用以下 content字段返回字符串:

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);
<pre id="r"></pre>

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

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);
<pre id="r"></pre>

您应该查看地图功能。这样使用:

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

作为您的问题的第一个评论指出,您始终必须使用循环,但是您可以使用原型来修补数组,例如:

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);

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

参见示例

最新更新