将对象映射到数组,然后使用jQuery输出值

时间:2014-06-05 12:00:27

标签: javascript jquery html arrays

我有以下javascript,它将客户列表放入一个对象,然后在页面上输出。

    var name = ["andrew", "vic", "casey"];
    var job = ["builder", "baker", "dentist"];
    var product = [111, 222, 111];
    var qty = [1, 2, 3];
    var data = {};
    for (i = 0; i < name.length; i++) {
        a = {
            "name": name[i],
            "job": job[i],
            "product": product[i],
            "qty": qty[i]
        };
        a['xtra-' + product[i]] = qty[i];
        data[name[i]] = a;
        console.log(a);
    }
        data = $.map(data, function (val, key) {
            return val;
        });    
        data.sort();
        $.each(data, function (i, val) {
            $('body').append(val.name + ' - ' + val.job + ' - ' + val.product + ' - ' + val.qty + ' - ' + (val.xtra + val.product)  + '<br>');
        });

根据我到目前为止see fiddle,我输出人名 - 工作 - 产品 - 数量。

andrew - builder - 111 - 1 - NaN<br>
vic - baker - 222 - 2 - NaN<br>
casey - dentist - 111 - 3 - NaN<br>

我还试图打印出一些额外的信息,这些信息存储在我的对象中,名为&#39; xtra - &#39; +产品[i]。

正如您在控制台日志中看到的那样,例如xtra-222,但是,我无法在每个语句中输出它? 我明白我做了什么

val.xtra + val.product

正在尝试添加一个带字符串的数字,这就是为什么它不起作用但我似乎无法找到所需的语法(可能是最后的第n项)或者还有另一种方法来实现我想要的东西吗? 如果有任何混淆,我希望我的输出是

andrew - builder - 111 - 1 - 1
vic - baker - 222 - 2 - 2
casey - dentist - 111 - 3 - 3

最后的1,2,3来自价值&#39; xtra - &#39; +产品[i]存储在

2 个答案:

答案 0 :(得分:3)

问题出在.each循环中,更具体地说是(val.xtra + val.product)

该循环的第一次运行的val对象是:

Object {name: "andrew", job: "builder", product: 111, qty: 1, xtra-111: 1}

如您所见,该对象中没有xtra键,而是您有一个xtra-111键。因此,如果您使用(val['xtra-' + val.product] + val.product),您将获得所需的结果。

这是固定代码http://jsfiddle.net/VdVax/

答案 1 :(得分:1)

你的$ .each中的

是什么意思

val["xtra-" + val.product]

这是一个工作小提琴http://jsfiddle.net/p5Zhc/3/