JavaScript 配列でよく使用される操作の紹介 (コード例)

不言
リリース: 2019-03-19 11:06:36
転載
2434 人が閲覧しました


この記事では、JavaScript 配列の一般的な操作 (コード例) を紹介します。これには特定の参考値があります。必要な友人は参照できます。お役に立てれば幸いです。

1. 元の配列を変更せず、新しい配列 (文字列) を返します。

1. concat() は 2 つ以上の配列を接続しますが、両側の元の配列は変更されません。返されるのは、連結された配列のコピーです。

2. join() 配列内のすべての要素を文字列に入れて文字列を返します

var a = [1,2,3];
a.join([4,5,6]);    //  "14,5,624,5,63"
a.join('sau');      //  "1sau2sau3"
ログイン後にコピー

3. slide() 先頭から末尾までを選択(末尾を除く) 浅い配列の一部を新しい配列にコピーします

var a  = [1,2,3,4,5];
a.slice(0,0);     //[]
a.slice(0,1);     //[1]
a.slice(2,4);    //[3,4]
a.slice(0,5);    //[1,2,3,4,5]
a.slice(10,1);   //[]
a.slice(4);   //[5]
ログイン後にコピー

4。map() は新しい配列を作成し、それを返します。新しい配列の各要素は、元の配列の各要素を呼び出して、提供された配列を実行することによって取得されます。次に、元の配列は変更されません

5。every() は、コールバック関数が false を返すまで、指定されたコールバック関数を配列内の各要素に対して 1 回実行します。この時点で、every() は false を返し、実行します実行を続行しません。コールバック関数がすべての要素に対して true を返す場合、every() は true を返します。

6. some() は、コールバック関数が true を返すまで、配列内の各要素に対して指定されたコールバック関数を 1 回実行します。この時点で、some() は true を返し、実行されなくなります。コールバック関数がすべての要素に対して false を返す場合、some() は false を返します。

7. filter() 提供された関数によって実装されたテストのすべての要素を含む新しい配列を作成します。

2. 元の配列を変更します

1. forEach() は、各要素に対して提供された関数を実行します。元の配列は変更され、実行結果は返されず、未定義が返されます。

2. Pop() は、配列の最後の要素を削除し、削除された要素の値を返します。配列が空の場合、配列は変更されず、unknown が返されます。

3. Push() は、1 つ以上の要素を配列の末尾に追加し、変更された配列の長さを返します。

4. reverse() は、配列内の要素の位置を反転し、配列への参照を返します。

5.shift() は、配列から最初の要素を削除し、元の配列を変更して、要素の値を返します。

6. unshift() 配列の先頭に 1 つ以上の要素を追加し、新しい配列の長さを返します。

7. sort() 配列の要素をソートし、配列を返します。ソートは必ずしも安定しているとは限りません。デフォルトの並べ替え順序は、文字列の Unicode コード ポイントに基づいています。

8. splice() は配列に要素を追加または削除し、削除された新しい array() を返します。

var a  = [1,2,3,4,5];
a.splice(0,1);     //删除从0位置开始的1个   返回[1]   a为[2,3,4,5] 
a.splice(1,0,99)   //在1的位置插入99   [2,99,3,4,5]
a.splice(1,1,88)   //99替换为88  [2,88,3,4,5]
ログイン後にコピー

3. トラバーサル メソッド

1. 属性名の取得: for...in と object.key()

の違い回答: 1. for in は、[[prototype]] プロトタイプ チェーンを含む、オブジェクトによって列挙できるプロパティ名のリストを走査します。

2. Object.keys() は、プロパティ名がオブジェクト内で、列挙可能なすべてのプロパティ名を含む配列を返します。

3. Object.getOwnPropertyNames() は、プロパティ名がオブジェクト内にあるかどうかのみをチェックし、列挙可能かどうかに関係なく、すべてのプロパティ名を含む配列を返します。

2. 属性値の取得: for... of および object.values()

for of ステートメント: [[propertype] ] を含む、反復可能オブジェクトの列挙可能な属性値リストを走査します。プロトタイプ チェーン;

object.values(): プロトタイプ チェーンを除く、指定されたオブジェクト自体の列挙可能なすべてのプロパティの値を返します。

4. ES6 構文を変換する キーと値のペアを配列にマップする

new Map はマップを作成します

// new Map创建一个map
let map = new Map([[1,"one"], [2,"two"], [3,"three"]]);
map.set(4, "four");
ログイン後にコピー
// 获取所有键值对
console.log("获取key")
console.log([...map.keys()]) // 输出[1, 2, 3, 4]

console.log("获取value")
console.log([...map.values()]) // 输出[one, two, three, four]

console.log("获取map数组")
console.log([...map]) // 输出[[1, "one"], [2, "two"], [3, "three"], [4, "four"]]
ログイン後にコピー

5. 2 つの昇順配列を昇順の配列にマージします。

1. 時間計算量 O(M N)、空間計算量 O(M N)

function merge(left, right){
    let result  = [],
        il      = 0,
        ir      = 0;

    while (il < left.length && ir < right.length) {
        result.push(left[il] < right[ir] ? left[il++] : right[ir++]);
console.log(result);
    }

    return result.concat(left.slice(il)).concat(right.slice(ir));
}
ログイン後にコピー

2. 時間計算量 O(M N)、空間計算量 O (1)

   // m, n 是数组长度
function merge(left, m, right,  n) {
    var i = m - 1, j = n - 1, writeIdx = m + n - 1;
    while (i >= 0 && j >= 0)
    left[writeIdx--] = left[i] > right[j]? left[i--] : right[j--];
    while (j >= 0)
    left[writeIdx--] = right[j--];
    return left;
}
ログイン後にコピー

6.配列の重複問題

(1)配列の重複排除

1.削減方法

const distinct = arr => arr.sort().reduce( (init, current) => {
    
    if (init.length === 0 || init[init.length - 1] !== current) {
        init.push( current );
    }
    return init;
}, []);

let arr = [1,2,1,2,3,5,4,5,3,4,4,4,4];
distinct(arr); // [1, 2, 3, 4, 5]
ログイン後にコピー

2 . Filter メソッド

const unique = arr => arr.filter( (element, Index, self) => {

return self.indexOf( element ) === index;
});
let arr = [1,2,1,2,3,5,4,5,3,4,4,4,4];
distinct(arr); // [1, 2, 3, 5, 4]
ログイン後にコピー

(2) ソートされた配列の重複排除

/**
 * @param {number[]} nums
 * @return {number}
 */
var removeDuplicates = function(nums) {
    
    if(!nums || nums.length == 0) return 0;
    
    let len = 0;
    for(let i = 1; i < nums.length; i++) {
        if (nums[len] != nums[i]) {
            nums[++ len] = nums[i];
        }
    }
    return len + 1;
};
ログイン後にコピー

(3) 配列内に重複があるかどうかを判断します

/**
 * @param {number[]} nums
 * @return {boolean}
 */
var containsDuplicate = function(nums) {
    
    let hashMap = new Map();
    for(let i = 0; i < nums.length; i++) {
        
        if( hashMap.has(nums[i]) ) {
           return true;
        }
        
        hashMap.set(nums[i], 1);
    }
    
    return false;
};
ログイン後にコピー

7. 2 つの配列の交差

##2 つの配列が与えられた場合、それらの交差を計算するメソッドを記述します。

For例:

nums1 = [1, 2, 2, 1], nums2 = [2, 2] の場合、[2, 2] を返します。

注: 1. 回数出力結果に現れる各要素は、その要素が 2 つの配列に現れる回数と一致している必要があります。2.

出力結果の順序は無視できます。

フォローアップ: 1.指定された配列が既にソートされている場合、アルゴリズムをどのように最適化しますか? 2. nums1 のサイズが nums2 よりもはるかに小さい場合、どの方法がより適切ですか? 3. nums2 の要素がディスクに保存されている場合、メモリは制限されています はい、すべての要素を一度にメモリにロードすることはできません。どうすればよいですか?

解決策:

/**
 * @param {number[]} nums1
 * @param {number[]} nums2
 * @return {number[]}
 */
var intersect = function(nums1, nums2) {
    
    var map1 = new Map();
    var number = [];
    
    for(var i = 0; i < nums1.length; i++) {
        var map1Value = map1.get(nums1[i]);
        map1.set( nums1[i], ( map1Value ? map1Value : 0 ) + 1 );
    }
    
    for(var i = 0; i < nums2.length; i++) {
        if( map1.has(nums2[i]) && map1.get(nums2[i]) != 0 ) {
            number.push(nums2[i]);
            map1.set( nums2[i], map1.get(nums2[i]) - 1 );
        }
    }
    
    return number;
};
ログイン後にコピー

8. 配列内で 1 回だけ出現する数値を見つけます

给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均出现两次。找出那个只出现了一次的元素。

/**
 * @param {number[]} nums
 * @return {number}
 */
var singleNumber = function(nums) {
    
    let number = 0;
    for(let i = 0; i < nums.length; i++) {
        number ^= nums[i];
    }
    return number;
};
ログイン後にコピー

本篇文章到这里就已经全部结束了,更多其他精彩内容可以关注PHP中文网的JavaScript教程视频栏目!

以上がJavaScript 配列でよく使用される操作の紹介 (コード例)の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

関連ラベル:
ソース:segmentfault.com
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート