繁体   English   中英

是否可以重写数组中的所有值而无需在JavaScript中进行for循环?

[英]Is possible to rewrite all values in array without for loop in 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循环:

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的想法。

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

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

例如,我们可以获取您的数据并返回一个字符串,其中所有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> 

您应该查看map函数 像这样使用它:

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

因此,您不必每次都想使用此功能时重写循环。

例子

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM