Jquery映射数组键和值

时间:2016-11-15 12:20:06

标签: javascript jquery arrays ajax

我在其他StackOverFlow问题上看过这个问题,我似乎无法找到答案。

我有一张表格。

<input name="item[1]" class="item" value="1">
<input name="item[2]" class="item" value="50">
<input name="item[3]" class="item" value="12">

我正在尝试获取每个项目输入的结果并通过Ajax将它们发送到我的控制器,这在使用form action =“”方法时很好但是通过ajax我似乎无法格式化数据数组格式。

谁能告诉我我做错了什么?

$('button#despatchOrder').on('click', function() {

    var values = $("input.items");

    var myArray = $.map(values, function(value, index) {
       return [value];
    });

    console.log(myArray);

});

不幸的是,Jquery不是我最强的语言,但我正在学习。我期待输出就像。

items = [
 1 => 1,
 2 => 50,
 3 => 12
]

但我有与输入相关的所有内容,如

Input 1 = [
accept
accessKey
alt 
etc
etc
]

2 个答案:

答案 0 :(得分:7)

  

谁能告诉我我做错了什么?

很少! : - )

  • $.map回调中,第一个参数将是元素,而不是其值,因此您只需使用其value属性。
  • 你也把它包装成一个你不想做的数组(return [value]); $.map将根据您从每次调用回调返回的值构建一个数组。
  • 此外,您在input.items使用了input.item
  • 如果不使用,则无需声明index参数。

    $('button#despatchOrder')。on('click',function(){

    var values = $("input.item");                          // ***
    
    var myArray = $.map(values, function(element) {        // ***
       return element.value;                               // ***
    });
    
    console.log(myArray);
    

    });

示例:

$('button#despatchOrder').on('click', function() {
    var values = $("input.item");
    var myArray = $.map(values, function(element) {
       return element.value;
    });
    console.log(myArray);
});
<input name="item[1]" class="item" value="1">
<input name="item[2]" class="item" value="50">
<input name="item[3]" class="item" value="12">
<button id="despatchOrder">Despatch</button><script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

使用item[1]和此类名称为您提供数组中没有的项目。您所展示的内容

items = [
 1 => 1,
 2 => 50,
 3 => 12
]

无效的JavaScript。以上给出了:

myArray = ["1", "50", "12"];

但是如果你想要名字/值对,可能最好是一组对象:

myArray = [
 {name: "1", value: "1"},
 {name: "2", value: "50"},
 {name: "3", value: "12"}
]

要做到这一点:

    var myArray = $.map(values, function(element) {
       return {name: element.name.substring(5, 6), value: element.value};
    });

当然,如果您想要整个名称item[1],只需删除substring部分即可。

示例:

$('button#despatchOrder').on('click', function() {
    var values = $("input.item");
    var myArray = $.map(values, function(element) {
       return {name: element.name.substring(5, 6), value: element.value};
    });
    console.log(myArray);
});
<input name="item[1]" class="item" value="1">
<input name="item[2]" class="item" value="50">
<input name="item[3]" class="item" value="12">
<button id="despatchOrder">Despatch</button><script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

为了完整起见,您还可以使用其他 map函数(jQuery有两个),但它对您没有任何好处:

var myArray = values.map(function() {
    return this.value;
}).get();

请注意最后的.get()

答案 1 :(得分:0)

javascript没有关联数组,但您仍然可以通过数字键访问元素

$('button#despatchOrder').on('click', function() {

    var values = $("input.items");

    var myArray = $.map(values, function(value, index) {
       return $(value).val();
    });

    console.log(myArray);
    console.log(myArray[0]);

});

如果你想要一些类似于关联数组的东西,你应该使用一个js对象

{key:"value"}