Rumah >hujung hadapan web >tutorial js >[Ringkasan] Kaedah operasi biasa tatasusunan JS untuk membantu anda meningkatkan kecekapan pembangunan!
Dalam pembangunan, terdapat banyak senario penggunaan untuk tatasusunan, dan banyak operasi berkaitan tatasusunan juga terlibat dalam kehidupan seharian. Artikel ini meringkaskan beberapa kaedah operasi biasa dan berkongsi dengan anda Jika anda boleh menggunakannya di hujung jari anda semasa pembangunan, anda boleh meningkatkan kecekapan pembangunan.
1 Jana nombor rawak
Melintasi tatasusunan, setiap Setiap gelung merawak nombor dalam julat panjang tatasusunan, dan menukar kedudukan gelung ini dan elemen pada kedudukan nombor rawak
function randomSort1(arr) { for (let i = 0, l = arr.length; i < l; i++) { let rc = parseInt(Math.random() * l) // 让当前循环的数组元素和随机出来的数组元素交换位置 const empty = arr[i] arr[i] = arr[rc] arr[rc] = empty } return arr } var arr1 = [1, 2, 3, 4, 5, 6, 7, 8, 9] // 下面两次的结果肯定是不一样的; console.log(randomSort1(arr1)) console.log(randomSort1(arr1))
2. Hasilkan tatasusunan baharu
Isytihar tatasusunan kosong baharu, gunakan gelung sementara, jika panjang tatasusunan lebih daripada 0, teruskan gelung
Setiap kali ia gelung , satu rawak ditambah pada Nombor tatasusunan dalam julat panjang, tolak elemen pada kedudukan nombor rawak ke dalam tatasusunan baharu,
dan gunakan splice (pelajar yang tidak faham splice boleh dibaca di sini) untuk memintas nombor rawak Elemen pada kedudukan juga mengubah suai panjang tatasusunan asal;
function randomSort2(arr) { var mixedArr = [] while (arr.length > 0) { let rc = parseInt(Math.random() * arr.length) mixedArr.push(arr[rc]) arr.splice(rc, 1) } return mixedArr } // 例子 var arr1 = [1, 2, 3, 4, 5, 6, 7, 8, 9] console.log(randomSort2(arr1))Jika nilai pulangan compareFunction(a, b) kurang daripada 0, maka a akan disusun sebelum b; nilai pulangan compareFunction(a, b) adalah sama dengan 0, maka kedudukan relatif a dan b kekal tidak berubah
Jika nilai pulangan compareFunction(a, b) adalah lebih besar; daripada 0, kemudian b akan disusun sebelum a; pengisihan atribut
Pendataran susunan
function randomSort3(arr) { arr.sort(function (a, b) { return Math.random() - 0.5 }) return arr } // 例子 var arr1 = [1, 2, 3, 4, 5, 6, 7, 8, 9] console.log(randomSort3(arr1))
2 3. Gunakan lelaran mengurangkan fungsi
function compare(property) { return function (a, b) { let value1 = a[property] let value2 = b[property] return value1 - value2 } } let arr = [ { name: 'zopp', age: 10 }, { name: 'gpp', age: 18 }, { name: 'yjj', age: 8 }, ] console.log(arr.sort(compare('age')))
4. >
function by(name, minor) { return function(o, p) { let a, b if (o && p && typeof o === 'object' && typeof p === 'object') { a = o[name] b = p[name] if (a === b) { return typeof minor === 'function' ? minor(o, p) : 0 } if (typeof a === typeof b) { return a < b ? -1 : 1 } return typeof a < typeof b ? -1 : 1 } else { thro('error') } } },1. Menggunakan atribut indexOf subscript array untuk pertanyaan
2. Isih tatasusunan asal dahulu, bandingkan dengan yang bersebelahan satu, dan simpannya dalam tatasusunan baharu jika ia berbeza.
ary = arr.flat(Infinity) console.log([1, [2, 3, [4, 5, [6, 7]]]].flat(Infinity))3. Gunakan kewujudan atribut objek Jika tiada atribut tersebut, simpannya dalam tatasusunan baharu.
let result = [] let flatten = function (arr) { for (let i = 0; i < arr.length; i++) { let item = arr[i] if (Array.isArray(arr[i])) { flatten(item) } else { result.push(item) } } return result } let arr = [1, 2, [3, 4], [5, [6, 7]]] console.log(flatten(arr))4. Gunakan kaedah termasuk pada objek prototaip tatasusunan.
function flatten(arr) { return arr.reduce((pre, cur) => { return pre.concat(Array.isArray(cur) ? flatten(cur) : cur) }, []) } let arr = [1, 2, [3, 4], [5, [6, 7]]] console.log(flatten(arr))5 Gunakan penapis dan sertakan kaedah pada objek prototaip tatasusunan.
function flatten(arr) { while (arr.some((item) => Array.isArray(item))) { arr = [].concat(...arr) } return arr } let arr = [1, 2, [3, 4], [5, [6, 7]]] console.log(flatten(arr))6. Gunakan kaedah set ES6.
function unique(arr) { var newArr = [] for (var i = 0; i < arr.length; i++) { if (newArr.indexOf(arr[i]) === -1) { newArr.push(arr[i]) } } return newArr } console.log(unique([1, 1, 2, 3, 5, 3, 1, 5, 6, 7, 4]))
function unique(arr) { var formArr = arr.sort() var newArr = [formArr[0]] for (let i = 1; i < formArr.length; i++) { if (formArr[i] !== formArr[i - 1]) { newArr.push(formArr[i]) } } return newArr } console.log(unique([1, 1, 2, 3, 5, 3, 1, 5, 6, 7, 4]))Kaedah 2
function unique(arr) { var obj = {} var newArr = [] for (let i = 0; i < arr.length; i++) { if (!obj[arr[i]]) { obj[arr[i]] = 1 newArr.push(arr[i]) } } return newArr } console.log(unique([1, 1, 2, 3, 5, 3, 1, 5, 6, 7, 4]))Persilangan/Kesatuan/Perbezaan
function unique(arr) { var newArr = [] for (var i = 0; i < arr.length; i++) { if (!newArr.includes(arr[i])) { newArr.push(arr[i]) } } return newArr } console.log(unique([1, 1, 2, 3, 5, 3, 1, 5, 6, 7, 4]))1
function unique(arr) { var newArr = [] newArr = arr.filter(function (item) { return newArr.includes(item) ? '' : newArr.push(item) }) return newArr } console.log(unique([1, 1, 2, 3, 5, 3, 1, 5, 6, 7, 4]))
2 ES6 Tetapkan struktur data
function unique(arr) { return Array.from(new Set(arr)) // 利用Array.from将Set结构转换成数组 } console.log(unique([1, 1, 2, 3, 5, 3, 1, 5, 6, 7, 4]))
1. Universal untuk gelung
function unique(arr) { const res = new Map() return arr.filter((item) => !res.has(item.productName) && res.set(item.productName, 1)) }
Kaedah rekursif
function unique(arr) { let result = {} let obj = {} for (var i = 0; i < arr.length; i++) { if (!obj[arr[i].key]) { result.push(arr[i]) obj[arr[i].key] = true } } }
Penukaran seperti tatasusunan
let a = [1, 2, 3] let b = [2, 4, 5] // 并集 let union = a.concat(b.filter((v) => !a.includes(v))) // [1,2,3,4,5] // 交集 let intersection = a.filter((v) => b.includes(v)) // [2] // 差集 let difference = a.concat(b).filter((v) => !a.includes(v) || !b.includes(v)) // [1,3,4,5]1 >
2. ES6's Array.from()
let a = new Set([1, 2, 3]) let b = new Set([2, 4, 5]) // 并集 let union = new Set([...a, ...b]) // Set {1, 2, 3, 4,5} // 交集 let intersect = new Set([...a].filter((x) => b.has(x))) // set {2} // a 相对于 b 的)差集 let difference = new Set([...a].filter((x) => !b.has(x))) // Set {1, 3}
function sum(arr) { var s = 0 for (var i = arr.length - 1; i >= 0; i--) { s += arr[i] } return s } sum([1, 2, 3, 4, 5]) // 15
Tukar data berikut ke dalam struktur pokok
function sum(arr) { var len = arr.length if (len == 0) { return 0 } else if (len == 1) { return arr[0] } else { return arr[0] + sum(arr.slice(1)) } } sum([1, 2, 3, 4, 5]) // 15
Kaedah pelaksanaan
function sum(arr) { return arr.reduce(function (prev, curr) { return prev + curr }, 0) } sum([1, 2, 3, 4, 5]) // 15[Cadangan berkaitan:
Atas ialah kandungan terperinci [Ringkasan] Kaedah operasi biasa tatasusunan JS untuk membantu anda meningkatkan kecekapan pembangunan!. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!