Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/380.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何使用jquery使用多维数组_Javascript_Jquery - Fatal编程技术网

Javascript 如何使用jquery使用多维数组

Javascript 如何使用jquery使用多维数组,javascript,jquery,Javascript,Jquery,我的页面中有标题为的列表项。我希望在一个数组中推送标题文本,然后创建一个新数组,并在单击事件时将列表项推送到它们,如 预期结果: Arr = ['small alpha', 'big alpha', 'number']; Arr['small alpha'] = ['a','b','c']; 代码: 您可以使用javascript对象 您可以使用javascript对象 使用类似的逻辑 var arr = [ ['member1','member2'], ['member3',

我的页面中有标题为的列表项。我希望在一个数组中推送标题文本,然后创建一个新数组,并在单击事件时将列表项推送到它们,如

预期结果:

Arr = ['small alpha', 'big alpha', 'number'];
Arr['small alpha'] = ['a','b','c'];
代码:


您可以使用javascript对象


您可以使用javascript对象


使用类似的逻辑

var arr = [
    ['member1','member2'],
    ['member3','member4']
];

arr [0][0] == 'member1';
arr [0][1] == 'member2';
arr [1][0] == 'member3';
arr [1][1] == 'member4';
看到答案了吗
使用类似的逻辑

var arr = [
    ['member1','member2'],
    ['member3','member4']
];

arr [0][0] == 'member1';
arr [0][1] == 'member2';
arr [1][0] == 'member3';
arr [1][1] == 'member4';
看到答案了吗 看到这个了吗

看到这个了吗

Arr[0]
转换为数组 您在这里尝试执行的最初问题是
Arr[0]
不是数组。如果代码工作正常(通过将“小alpha”
h2
元素拉入
Arr
元素的位置0),
Arr[0]
将是一个字符串

Arr[0] === "small alpha";
因此,在调用
Arr[0].push()时,您试图调用字符串上的数组方法。这会引发一个错误:

未捕获类型错误:对象小alpha没有方法“push”

为了纠正这一点,我们需要通过声明
Arr[0]=[]
Arr[0]
转换为一个数组:

...
Arr[0] = [];
Arr[0].push($(this).closest('ul').find('li').text());
...

修复代码 首先,您需要将
h2
文本存储到可重用变量中:

var key = $(this).closest('ul').find('h2').text();
值得注意的是,
h2
元素不允许是
ul
元素的子元素,因此HTML在当前状态下无效。您需要自己解决这个问题,并提出一个不同的选择器,但对于这个答案的其余部分,我将使用当前的选择器

当我们使用它作为键时,我们不需要将这个值放入数组中,所以我们一起放弃第一个
push()
调用

我们可以改为使用
Arr[key]
,而不是使用
Arr[0]
引用您的密钥。我们现在需要创建内部数组并将
li
文本推入其中:

Arr[key] = [];
Arr[key].push($(this).closest('ul').find('li').text());
总之,您的代码现在将如下所示:

var Arr= [];
$('a').click(function(){
    var key = $(this).closest('ul').find('h2').text();
    Arr[key] = [];
    Arr[key].push($(this).closest('ul').find('li').text());
    console.log(Arr)    
});
var Arr= [];
$('a').click(function(){
    var key = $(this).closest('ul').find('h2').text();
    Arr[key] = [];
    Arr[key].push($(this).closest('ul').find('li')
        .map(function() { return $(this).text() }).get());
    console.log(Arr)    
});
其结果是:

[小阿尔法:阵列]
---0:“abC”


将每个
li
文本分别推入数组 上述代码的问题在于,您的所有
li
值都被压缩为一个:
Arr['small alpha']==[“abC”]
。为了解决这个问题,我们可以引入

我们现在将使用
map()
将每个
li
的文本映射到一个数组中,而不是调用
…find('li').text()

$(this).closest('ul').find('li').map(function() { return $(this).text() }).get()
总体而言,您的代码现在如下所示:

var Arr= [];
$('a').click(function(){
    var key = $(this).closest('ul').find('h2').text();
    Arr[key] = [];
    Arr[key].push($(this).closest('ul').find('li').text());
    console.log(Arr)    
});
var Arr= [];
$('a').click(function(){
    var key = $(this).closest('ul').find('h2').text();
    Arr[key] = [];
    Arr[key].push($(this).closest('ul').find('li')
        .map(function() { return $(this).text() }).get());
    console.log(Arr)    
});
其结果是:

[小阿尔法:阵列]
... 0:“a”
... 1:“b”
... 2:“C”


.
如果您单击所有三个“获取”链接,您将得到:

Arr
    ['small alpha']
        ['a', 'b', 'C']
    ['big alpha']
        ['A', 'B', 'C']
    ['number']
        [1, 2, 3]
Arr[0]
转换为数组 您在这里尝试执行的最初问题是
Arr[0]
不是数组。如果代码工作正常(通过将“小alpha”
h2
元素拉入
Arr
元素的位置0),
Arr[0]
将是一个字符串

Arr[0] === "small alpha";
因此,在调用
Arr[0].push()时,您试图调用字符串上的数组方法。这会引发一个错误:

未捕获类型错误:对象小alpha没有方法“push”

为了纠正这一点,我们需要通过声明
Arr[0]=[]
Arr[0]
转换为一个数组:

...
Arr[0] = [];
Arr[0].push($(this).closest('ul').find('li').text());
...

修复代码 首先,您需要将
h2
文本存储到可重用变量中:

var key = $(this).closest('ul').find('h2').text();
值得注意的是,
h2
元素不允许是
ul
元素的子元素,因此HTML在当前状态下无效。您需要自己解决这个问题,并提出一个不同的选择器,但对于这个答案的其余部分,我将使用当前的选择器

当我们使用它作为键时,我们不需要将这个值放入数组中,所以我们一起放弃第一个
push()
调用

我们可以改为使用
Arr[key]
,而不是使用
Arr[0]
引用您的密钥。我们现在需要创建内部数组并将
li
文本推入其中:

Arr[key] = [];
Arr[key].push($(this).closest('ul').find('li').text());
总之,您的代码现在将如下所示:

var Arr= [];
$('a').click(function(){
    var key = $(this).closest('ul').find('h2').text();
    Arr[key] = [];
    Arr[key].push($(this).closest('ul').find('li').text());
    console.log(Arr)    
});
var Arr= [];
$('a').click(function(){
    var key = $(this).closest('ul').find('h2').text();
    Arr[key] = [];
    Arr[key].push($(this).closest('ul').find('li')
        .map(function() { return $(this).text() }).get());
    console.log(Arr)    
});
其结果是:

[小阿尔法:阵列]
---0:“abC”


将每个
li
文本分别推入数组 上述代码的问题在于,您的所有
li
值都被压缩为一个:
Arr['small alpha']==[“abC”]
。为了解决这个问题,我们可以引入

我们现在将使用
map()
将每个
li
的文本映射到一个数组中,而不是调用
…find('li').text()

$(this).closest('ul').find('li').map(function() { return $(this).text() }).get()
总体而言,您的代码现在如下所示:

var Arr= [];
$('a').click(function(){
    var key = $(this).closest('ul').find('h2').text();
    Arr[key] = [];
    Arr[key].push($(this).closest('ul').find('li').text());
    console.log(Arr)    
});
var Arr= [];
$('a').click(function(){
    var key = $(this).closest('ul').find('h2').text();
    Arr[key] = [];
    Arr[key].push($(this).closest('ul').find('li')
        .map(function() { return $(this).text() }).get());
    console.log(Arr)    
});
其结果是:

[小阿尔法:阵列]
... 0:“a”
... 1:“b”
... 2:“C”


.
如果您单击所有三个“获取”链接,您将得到:

Arr
    ['small alpha']
        ['a', 'b', 'C']
    ['big alpha']
        ['A', 'B', 'C']
    ['number']
        [1, 2, 3]

请描述您的代码存在的问题。另外,您的HTML是无效的,因为您只能将
li
元素作为
ul
的直接子元素。我希望得到预期的结果:从代码中很容易做到。但是如果我单击single
a
你想得到所有的
ul
和它们的
li
s@user10:如果单击单个a,则应在一个数组中添加其各自的ul
ul
,并在另一个数组中添加其
li
。对的如果我一次又一次地点击
a
,它应该只有一个
ui
。正确吗?请描述您的代码存在的问题。另外,您的HTML是无效的,因为您只能将
li
元素作为
ul
的直接子元素。我希望得到预期的结果:从代码中很容易做到。但是如果我单击single
a
你想得到所有的
ul
和它们的
li
s@user10:如果单击单个a,则应在一个数组中添加其各自的ul
ul
,并且