Jquery映射数组键和值



我已经在其他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发送到我的控制器,这是很好的,当使用表单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
]
谁能告诉我我做错了什么?

很少!: -)

  • 在你的$.map回调中,第一个参数将是元素,而不是它的值,所以你只使用它的value属性。
  • 你也包装它在一个数组(return [value]),你不想这样做;$.map将根据您从每次回调调用返回的值构建一个数组。
  • 还有,你想用input.item的地方用了input.items
  • 如果你不使用index参数,你不需要声明它。

    $('按钮# 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()

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"}

最新更新