所謂數組就是值的有序集合,js數組元素能夠是任意類型,而且是動態的,根據須要它們會增加或縮減,js數組是js對象的特殊形式,數組索引碰巧是整數的屬性名差很少vue
var a = new Array();
var a = new Array(10); //長度爲10的數組
var a = new Array(10, 2, 'a', 'b'); // [10, 2, 'a', 'b']
複製代碼
//shift unshift
//pop push
// splice() //俗稱數組萬能方法 插入,刪除和替換
複製代碼
//Array.join(); //String.split() 操做相反
//Array.reverse(); //改變了原數組 返回值也是翻轉後的數組
//Array.sort(); //改變了原數組 返回值也是翻轉後的數組
//Array.concat(); //不會改變原來的數組
//若是這些參數中的任何一個自身是數組,
//則鏈接的是數組的元素,而非數組自己。但要注意,concat()不會遞歸扁平化數組的數組。
var a = [1, 2, 3];
a.concat(4, [5, [6, 7]]) //返回[1, 2, 3, 4, 5, [6, 7]]
//Array.slice() //參數爲開始和結束的位置,返回一個數組,不會改變原來的數組
複製代碼
//forEach //注意forEach中不能使用break
//map //返回一個映射的新數組
//filter //返回知足條件造成的新數組
//every和some //返回 true或者false
//reduce //使用指定的函數將數組元素進行組合,生成單個值 兩個參數 一個是化簡函數一個是初始值 其中初始值就是化簡函數第一次執行時的第二個參數y,若是沒有初始值,那麼將使用數組的第一個元素當初始值
let arr = [2, 4, 6, 9]
//數組求和
arr.reduce(function(x,y){ //化簡函數的參數:
//toal必選 初始值或者化簡後的值,
//currentValue必選 當前值,
//currentIndex可選當前索引,
//arr可選。當前元素所屬的數組對象。
return x*y
},1)
//數組求積
複製代碼
var isArray = function(o){
return typeof o === "object" && Object.prototype.toString.call(o) === "[object Array]"
}
複製代碼
function popSort(arr){
for(var i = 0; i<arr.length-1; i++) {
for(var j=0;j<arr.length-1-i;j++) {
if(arr[j] > arr[j+1]) {
let temp = arr[j];
arr[j] = arr[j+1];
arr[j+1] = temp;
}
}
}
return arr
}
複製代碼
function secSort(arr){
for(var i = 0; i<arr.length; i++) {
let min = arr[i];
let minIndex = i;
for(var j=i; j<arr.length; j++) {
if(min > arr[j]) {
min = arr[j]
minIndex = j
}
}
let temp = min;
arr[minIndex] = arr[i]
arr[i] = temp;
}
return arr
}
複製代碼
var arr = [4,3,6,5,7,2,1];
arr.sort();
arr.sort(function(a,b){ //a-b升序
return a-b;
});
console.log(arr);
複製代碼
const s = new Set();
[2, 3, 5, 4, 5, 2, 2].forEach(x => s.add(x));
for (let i of s) {
console.log(i);
}
// 2 3 5 4
複製代碼
//去除數組的重複成員
let arr1 = [2,3,5,2,4,4,5]
console.log([...new Set(arr1)]);
//[ 2, 3, 5, 4 ]
複製代碼
let arr = [2,3,5,2,4,4,5]
let obj = {};
for(let i = 0;i<arr.length;i++) {
obj[arr[i]] = 1;
}
console.log(Object.keys(obj)) //[ '2', '3', '4', '5' ] 變成了字符串
複製代碼
let arr = [2,3,5,2,4,4,5]
for(let i = 0;i<arr.length;i++) {
for(let j = i+1;j<arr.length;j++) {
if(arr[i] === arr[j]) {
arr.splice(j,1)
i--
}
}
}
console.log(arr)
複製代碼
經過上面的第2個解法引起了思考,若是數組裏面有對象呢,解決辦法就是在每一次遍歷前都須要判斷一下類型,若是是對象就單獨push進另外一個數組裏,而後經過解構或者concat從新結合成新數組須要特別說明的是 set很是強大,向 Set 加入值的時候,不會發生類型轉換,優先採用1和3, 2通常不用 用的話也須要特殊處理,補充 若是真想用的話,不用對obj了,特殊處理較爲複雜,採用map吧es6
let arr = [2,3,5,2,4,4,5]
let map = new Map();
for(let i = 0;i<arr.length;i++) {
map.set(arr[i],1)
}
console.log([...map.keys()]) //[ 2, 3, 5, 4 ]
複製代碼
vue中如下不能檢測到數據變化數組
以上就是本身總結的一些有關數組常問的問題,部分給出了答案!固然有一些不足和不完善之處,歡迎各位指出!bash