2017-01-13 15 views
9

Yakın zamanda eslint kuralını no-param-reassign ekledim. AncakArray.prototype.reduce() işlevlerinde eslint no-param-yeniden atama kuralı nasıl kullanılır

, bir no-param-reassign linter şikayeti neden her geri arama yineleme ile (birinci geri arama fonksiyonunun arg) accumulator (gibi bir nesne (initialValue olarak boş bir nesne), kendim değiştirmeye gerek bulmak oluşturmaktır reduce kullanımı biri beklerdi).

const newObject = ['a', 'b', 'c'].reduce((result, item, index) => { 
    result[item] = index; // <-- causes the no-param-reassign complaint 
    return result; 
}, {}); 

accumulator argüman değiştirmez reduce içeren bir nesne oluşturmaktır için daha iyi bir yolu var mı?

Veya reduce geri arama işlevlerimde o satırın atlama kuralını basitçe devre dışı bırakmalı mıyım? Eğer linter kandırmak istiyorsanız

+3

Not nihayet object spread operator) kullanılarak aklıma yeni bir cevap göndermek için bu soruyu yeniden ziyaret ediyorum, bu özellikle geçerli: TRUE kuralına Varsayılan olarak bu konuda şikayet etmez. Eğer bu davranışı istemezseniz, bunu 'false' olarak ayarlamak istediğiniz gibi mi görünüyor? Veya // eslint-disable-line no-param-reassign.' – loganfsmyth

+0

ile işaretleyin, bu iyi bir nokta @loganfsmyth. Ben "yeniden" gerçek ayarlamak için gerçekten ne istediğimizi görmek için bazı yeniden muayene yapacağız ... – sfletche

cevap

7

ben ...

const newObject = ['a', 'b', 'c'].reduce((result, item, index) => ({ 
    ...result, 
    [item]: index, 
}), {}); 
+3

Bu gerçekten iyi bir çözüm mü? Bir çok unsuru olan bir diziyi küçültmek, 2000 de, bu durumda 2000 gibi, birçok yeni nesne örneği oluşturacaktır. – Amida

4

Eh, bunu mevcut kod olarak ancak açık bir olmadan aynı bağlantıda bulunduğu (=> Object.assign(result, {[item]: whatever}) kullanabilirsiniz,

:-) her değişiklikte yeni bir nesne oluşturmak için (result, item) => Object.assign({}, result, {[item]: whatever}) yapabilirdi atama), ama evet, bu kuralı basitçe devre dışı bırakmalısınız. Eğer ` "sahne" ilettik çünkü

+1

evet, bu ne düşündüm. belki de bu hat için kuralın devre dışı bırakılması en iyi seçenek ... – sfletche

İlgili konular