Rumah > hujung hadapan web > tutorial js > [Ringkasan] Kaedah operasi biasa tatasusunan JS untuk membantu anda meningkatkan kecekapan pembangunan!

[Ringkasan] Kaedah operasi biasa tatasusunan JS untuk membantu anda meningkatkan kecekapan pembangunan!

青灯夜游
Lepaskan: 2022-08-04 18:53:00
ke hadapan
1324 orang telah melayarinya

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.

[Ringkasan] Kaedah operasi biasa tatasusunan JS untuk membantu anda meningkatkan kecekapan pembangunan!

Isih rawak


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))
Salin selepas log masuk

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))
Salin selepas log masuk
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
  • 2. Pengisihan berbilang 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))
Salin selepas log masuk

1. Panggil kaedah rata dalam ES6


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')))
Salin selepas log masuk

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(&#39;error&#39;)
    }
  }
},
Salin selepas log masuk
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))
Salin selepas log masuk
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))
Salin selepas log masuk
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))
Salin selepas log masuk
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))
Salin selepas log masuk
6. Gunakan kaedah set ES6.


Alih keluar pendua berdasarkan atribut


Kaedah 1
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]))
Salin selepas log masuk

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]))
Salin selepas log masuk
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]))
Salin selepas log masuk
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]))
Salin selepas log masuk
1

function unique(arr) {
  var newArr = []
  newArr = arr.filter(function (item) {
    return newArr.includes(item) ? &#39;&#39; : newArr.push(item)
  })
  return newArr
}
console.log(unique([1, 1, 2, 3, 5, 3, 1, 5, 6, 7, 4]))
Salin selepas log masuk

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]))
Salin selepas log masuk

Penjumlahan tatasusunan


1. Universal untuk gelung

function unique(arr) {
  const res = new Map()
  return arr.filter((item) => !res.has(item.productName) && res.set(item.productName, 1))
}
Salin selepas log masuk

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
    }
  }
}
Salin selepas log masuk

3. Kaedah pengurangan ES6


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]
Salin selepas log masuk
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}
Salin selepas log masuk

3 🎜>

Gerakkan tatasusunan ke atas dan ke bawah


Tatasusunan ditukar menjadi struktur pokok
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
Salin selepas log masuk

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
Salin selepas log masuk

Kaedah pelaksanaan

function sum(arr) {
  return arr.reduce(function (prev, curr) {
    return prev + curr
  }, 0)
}

sum([1, 2, 3, 4, 5]) // 15
Salin selepas log masuk
[Cadangan berkaitan:

tutorial pembelajaran javascript]


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!

Label berkaitan:
sumber:juejin.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan