代码之家  ›  专栏  ›  技术社区  ›  Roland

如何删除或插入到JavaScript多维数组中

  •  0
  • Roland  · 技术社区  · 6 年前

    我有这样的二维数据结构:

        var arr = [
            {
                'subarr': [
                    { 'a': '11' },
                    { 'a': '12' }
                ]
            },
            {
                'subarr': [
                    { 'a': '21' },
                    { 'a': '22' }
                ]
            },
            {
                'subarr': [
                    { 'a': '31' },
                    { 'a': '32' }
                ]
            }
        ];
    

    我需要插入一个元素,例如“23”,或者删除,例如“22”。

    这个 slice 方法不复制整个数据,而是在数组“就地”中插入或删除。但如何将其应用于二维数组呢?此代码将 不工作 ,因为[i]操作创建了一个新变量,所以 arr 完全不会更改:

    arr[1].subarr.slice(0, 1);
    

    我需要一些变量的引用类型来指向要切片的子数组。

    任何帮助都将不胜感激


    更常见的情况是:复杂的问题有一个简单的答案。我应该用 splice() ,不是 slice() 正如答案告诉我的。

    2 回复  |  直到 6 年前
        1
  •  2
  •   Emeeus    6 年前

    添加 push(), [] ,请 splice() unshift()

    arr[1].subarr.push({'a':'23'}); //add at the end
    

    arr[1].subarr.unshift({'a':'23'}); //add in the beginig
    

    在特定位置添加(本例中为2th)

    arr[1].subarr.splice(2, 0, {'a':'433'}, {'a':'544'});
    

    拆卸接头

    arr[1].subarr.splice(1,1); //splice(start,deleteCount)
    
        2
  •  1
  •   BlackBeard    6 年前

    如何插入不带 突变 以下内容:

        var arr = [
            {
                'subarr': [
                    { 'a': '11' },
                    { 'a': '12' }
                ]
            },
            {
                'subarr': [
                    { 'a': '21' },
                    { 'a': '22' }
                ]
            },
            {
                'subarr': [
                    { 'a': '31' },
                    { 'a': '32' }
                ]
            }
        ];
        
        var newArr = [...arr, arr[0].subarr.push({'a':'23'})]
        console.log(newArr)

    如何在不使用 突变 以下内容:

        var arr = [
            {
                'subarr': [
                    { 'a': '11' },
                    { 'a': '12' }
                ]
            },
            {
                'subarr': [
                    { 'a': '21' },
                    { 'a': '22' }
                ]
            },
            {
                'subarr': [
                    { 'a': '31' },
                    { 'a': '32' }
                ]
            }
        ];
    
    var newArr = [...arr.map(element => element.subarr.filter(item => item.a !== '22'))]
    
    console.log(newArr)