簡體   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