javascript - 如何在 Javascript 中创建多维数组并避免重复?

标签 javascript jquery arrays

我有以下 HTML:

<input type="text" name="inp1" id="inp1" />
<input type="text" name="inp2" id="inp2" />
<input type="text" name="inp3" id="inp3" />

<input type="submit" value="Send" id="clickMe" />

每次单击提交按钮时,我都应该将每个 inp* 的值添加到一个数组中,这样我最终会得到如下结果:

[
     ['inp1' => val1, 'inp2' => val2, 'inp3' => val3],
     ['inp1' => val10, 'inp2' => val20, 'inp3' => val30],
     ['inp1' => val11, 'inp2' => val21, 'inp3' => val31],
     ['inp1' => val12, 'inp2' => val22, 'inp3' => val32]
]

阅读后this article我想我可以做到以下几点:

var obj = {};
var item = [];

$('#clickMe').click(function() {
    item.push(
        $('#inp1').val(),
        $('#inp2').val(),
        $('#inp3').val()
    ); 
});

但是上面的解决方案最终会得到一个线性数组,而不是我想要的(例如 Fiddle 上的 here )。我已阅读herehere但我越来越困惑了。

此外,我不应该有重复的元素,因此:

[
     ['inp1' => val1, 'inp2' => val2, 'inp3' => val3],
     ['inp1' => val1, 'inp2' => val2, 'inp3' => val3]
]

无效。那么,如何处理这个问题并获得多维数组的正确方法呢?任何人都可以给我一些帮助并留下一个例子以便我得到这个吗?

编辑:按照建议,代码应该与大多数浏览器兼容,对于 IE 应该是 IE9+

最佳答案

您可以维护 Set ,它比使用对象属性更适合此目的:

var list = new Set(); // helper object to avoid duplicates
var items = []; // the real 2D array

$('#clickMe').click(function() {
    var item = [
        $('#inp1').val(),
        $('#inp2').val(),
        $('#inp3').val()
    ];
    var key = JSON.stringify(item);
    if (list.has(key)) return; // skip
    list.add(key);
    items.push(item);
    return false; // to avoid that the form submits.
});

如果您有更多的 input 元素,那么通过循环获取它们的值可能是值得的:

var item = $('form input[type=text]').map(function () { 
    return $(this).val(); 
}).get();

何时需要支持旧版浏览器

...那么 Set 就不是一个选项。使用普通对象代替:

var list = {}; // helper object to avoid duplicates
var items = []; // the real 2D array

$('#clickMe').click(function() {
    var item = [
        $('#inp1').val(),
        $('#inp2').val(),
        $('#inp3').val()
    ];
    var key = JSON.stringify(item);
    if (list[key] === 1) return; // skip
    list[key] = 1;
    items.push(item);
    return false; // to avoid that the form submits.
});

关于javascript - 如何在 Javascript 中创建多维数组并避免重复?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40555121/

相关文章:

javascript - jQuery 选择列表 : shows only one

javascript - Flask 在不同项目运行时加载相同的 index.js 文件

javascript - React-toastify 显示多个 toast

javascript - 如何使用 Angular Material 的 $mddialog 服务中的 typescript 在 IDialogOptions 中设置解析签名

jquery - 制作 Jquery shuffle Gallery

arrays - 如何通过将一个元素添加到前一个条目来将值附加到 Bash 中的数组?

javascript - 在Electron BrowserView中访问DOM

html - 如何实现Jquery noconflict

arrays - 找到分离数组的方法,使每个子数组的总和小于或等于一个数字

javascript - 为什么 indexOf 没有在搜索到的数组中找到一个数组? (需要解释而不是解决方案)