Underscore: _.tanpa menerima array sebagai argumen kedua

Dibuat pada 21 Jan 2011  ·  10Komentar  ·  Sumber: jashkenas/underscore

Definisi saat ini dari _.without accept array sebagai argumen pertama dan kemudian sejumlah argumen berikut. Saya tahu ini mungkin rumit, tetapi akan sangat membantu, jika saya bisa meneruskan array lain sebagai argumen.

Fungsionalitas baru akan berfungsi sebagai
_.tanpa([1,2,3], [1, 2])
kembali
[3]

Sejauh yang saya tahu _.tanpa tidak bekerja dalam, jadi mungkin tidak terlalu rumit -
_.tanpa([1,2,3,[1]], [1], 1)
kembali
[2, 3, [1]]

enhancement wontfix

Komentar yang paling membantu

Bagi mereka yang menemukan jalan mereka di sini.... _.difference([0, 1, 3, 9], [1, 3]); // => [0, 9]

Dari: http://stackoverflow.com/questions/5722254/underscore-js-is-there-a-function-that-produces-an-array-thats-the-difference

Semua 10 komentar

Untungnya, JavaScript memiliki cara bawaan untuk melewatkan fungsi sejumlah argumen.

https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/function/apply

_.without.apply(_, [1, 2, 3], [1, 2])

Tentu saja! Bodohnya aku, bagaimana aku bisa lupa...

Sepertinya itu perlu disebut seperti ini

_.without.apply(_, [[1,2,3], 1, 2])

Yang membuatnya sedikit rumit (menghapus array pengecualian dengan array asli).

PEMBARUAN: Saya membuat tiket baru untuk masalah ini: https://github.com/documentcloud/underscore/issues/issue/118

Saya harus setuju dengan Anda berdua: kepada Jeremy untuk menjaga konsistensi _.tanpa tanda tangan dan kepada Ondrey karena menemukan solusi yang diusulkan Jeremy sedikit meretas (sepertinya tidak berhasil untuk saya juga).

Jadi, saya ingin mengusulkan pengenalan dua fungsi garis bawah baru: _.difference(*arrays) dan _.symdifference(a,b) : perbedaan akan menemukan semua elemen dari larik pertama yang tidak muncul di larik lain yang disediakan, di mana _.symdifference() akan mengembalikan elemen-elemen yang ada di a atau di b tetapi tidak di keduanya.

"Inspirasi" untuk fungsi-fungsi ini berasal dari python set datatype dan IMHO mereka tidak boleh hanya terbatas pada array, karena mereka juga berlaku untuk objek.

Cara cepat untuk menulisnya dengan garis bawah: _.without.apply(_, [x].concat(y)), akan mengembalikan array nilai dalam x tanpa nilai dalam y.

Jawaban @rubenstolk berfungsi kecuali dia tidak mengomentari kodenya sehingga garis bawah ditafsirkan sebagai miring. Untuk generasi mendatang! :railway_car: :roket: :pelangi: :raised_hands:

_.without.apply(_, [originalArray].concat(removeArray));

Saya pikir Github tidak melakukan itu 2 tahun yang lalu @reggi!

Bagi mereka yang menemukan jalan mereka di sini.... _.difference([0, 1, 3, 9], [1, 3]); // => [0, 9]

Dari: http://stackoverflow.com/questions/5722254/underscore-js-is-there-a-function-that-produces-an-array-thats-the-difference

Saya tahu ini ditutup, tetapi operator spread ES6 akan membantu dengan ini;)

Bagi siapa saja yang tidak ingin mencari operator spread ES6 yang disebutkan

const items = [1,2,3,4];
const itemsToRemove = [3,4,5];
const result = _.without(items, ...itemsToRemove);
// result is [1,2]

Terima kasih @addisonbgross!

Apakah halaman ini membantu?
0 / 5 - 0 peringkat

Masalah terkait

xiaoliwang picture xiaoliwang  ·  3Komentar

jdalton picture jdalton  ·  4Komentar

githublyp picture githublyp  ·  3Komentar

chikamichi picture chikamichi  ·  8Komentar

zackschuster picture zackschuster  ·  5Komentar