如何使用 jquery 使用多维数组
How to use multidimensional array using jquery
我的页面中有带标题的列表项。我希望将标题文本放在一个数组中,然后在单击事件时创建一个新数组并将列表项推送到它们。小提琴。
预期成果:
Arr = ['small alpha', 'big alpha', 'number'];
Arr['small alpha'] = ['a','b','c'];
法典:
var Arr = [];
$('a').click(function() {
Arr.push($(this).closest('ul').find('h2').text());
alert(Arr['small alpha'])
Arr[0].push($(this).closest('ul').find('li').text());
console.log(Arr)
});
将Arr[0]
转换为数组
您在此处尝试执行的操作的最初问题是Arr[0]
不是数组。如果您的代码工作正常(通过将"小 alpha"h2
元素拉入位置 0 的 Arr
元素(,Arr[0]
将是一个字符串。
Arr[0] === "small alpha";
因此,在调用Arr[0].push()
时,您尝试对字符串调用数组方法。这将引发错误:
未捕获的类型错误:对象小 alpha 没有方法"推送">
为了纠正这一点,我们需要简单地通过声明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[0]
来引用您的密钥,不如使用 Arr[key]
.我们现在需要创建内部数组并将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)
});
其结果是:
[小阿尔法:数组 1]
--- 0:"abC">
JSFiddle demo.
将每个li
文本分别推送到数组中
上述代码的问题在于所有li
值都压缩为一个:Arr['small alpha'] === ["abC"]
。为了解决这个问题,我们可以引入 jQuery map()
方法。
我们现在不是调用...find('li').text()
,而是使用map()
将每个li
的文本映射到一个数组中:
$(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')
.map(function() { return $(this).text() }).get());
console.log(Arr)
});
其结果是:
[小阿尔法:数组 1]
...0:"a">
...1:"b">
...2:"C">
最终的 JSFiddle 演示。
如果你点击所有三个"获取"链接,你最终会得到:
Arr
['small alpha']
['a', 'b', 'C']
['big alpha']
['A', 'B', 'C']
['number']
[1, 2, 3]
您可以使用 JavaScript 对象
http://javascript.ru/Object
使用类似逻辑的东西。
var arr = [
['member1','member2'],
['member3','member4']
];
arr [0][0] == 'member1';
arr [0][1] == 'member2';
arr [1][0] == 'member3';
arr [1][1] == 'member4';
查看答案 JavaScript 多维数组
看到这个jsFiddle
var Arr= [], Arr2 = {};
$('a').click(function(){
var ht = $(this).closest('ul').find('h2').text(), a = [];
Arr.push(ht);
$(this).closest('ul').find("li").each(function () {
a.push($(this).text());
})
Arr2[ht] = a;
console.log(Arr);
console.log(Arr2);
})
- 如何从txt文件中获取要在javascript数组中使用的对象
- 在对象数组上使用map()检查差异
- 如何加载JSON数组以使用Angular-Translate翻译AngularJS网页
- 在多维数组中使用 IMG
- 比较数组并使用条件对数组列表进行排序
- 将代理与纯数组一起使用
- PDO fetchAll,fetch及其与解码JSON数组的使用
- PHP和Ajax在回调和返回数组中使用foreach循环
- 在使用promise数组时使用jQuery
- 在for循环中设置断点会导致在数组上使用原型时出错
- 在嵌入式PHP数组中使用JavaScript变量
- 如何在数组上使用 .each()
- 在数组中使用注释字符构建复杂字符串
- 使用 javascript 捕获数组并使用数组的值
- 将数组原型函数与非数组一起使用
- 为什么我的数组无法使用 innerhtml
- 如何在单个语句中的 $$('selector') 数组上使用 PrototypeJS .wrap()
- json 数组未使用 Javascript post 方法发布到 PHP
- 无法循环访问比较文本值的数组,使用量角器未定义的结果
- 动态结果数组需要使用 Angular JS 与不同布局的表绑定