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