首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >将两个javascript对象合并到新的key : value对象

将两个javascript对象合并到新的key : value对象
EN

Stack Overflow用户
提问于 2013-03-11 19:43:21
回答 3查看 183关注 0票数 0

将这两个对象合并为一个并添加键的最佳方法是什么。我已经尝试了很多,但是我对javascript在对象和数组上的工作方式感到困惑.谁能指引我走向正确的方向?使用普通的JS或jquery。

对象1

代码语言:javascript
运行
复制
["EUR 1,99", "EUR 0,99", "EUR 4,99", "EUR 2,29", "EUR 1,43", "EUR 1,60", "EUR 1,79", "EUR 1,79", "EUR 1,39", "EUR 6,30", "EUR 1,43", "EUR 1,78", "EUR 1,90", "EUR 1,24", "EUR 1,41"]

对象2

代码语言:javascript
运行
复制
["Popken", "Lucky Animal", "mein-terrarium", "zooup", "zoofair", "XL-Hundeshop", "tiierisch-de", "Zoo Galaxie", "Petshop", "Danto GmbH", "Heimtierbedarf-Mazinke", "TIERKOSMOS", "Gazoma", "Zooheld", "dasko24"]

所需对象

代码语言:javascript
运行
复制
[[Price="EUR 1,99",Name="Popken"],[Price="EUR 0,99",Name="Lucky Animal"],[Price="EUR 4,99",Name="mein-terrarium"], etc....]  
EN

回答 3

Stack Overflow用户

发布于 2013-03-11 19:48:24

应该很简单。假设arr1是带有价格的数组,而arr2是具有名称的数组:

代码语言:javascript
运行
复制
var newarr = [],
    len = (number of items);

for(var i=0;i<len;i++){
    newarr.push({
        Price:arr1[i];
        Name:arr2[i];
    });
}
票数 0
EN

Stack Overflow用户

发布于 2013-03-11 19:53:26

在underscore.js中使用zip函数的解决方案

代码语言:javascript
运行
复制
var prices = ["EUR 1,99", "EUR 0,99", "EUR 4,99", "EUR 2,29", "EUR 1,43", "EUR 1,60", "EUR 1,79", "EUR 1,79", "EUR 1,39", "EUR 6,30", "EUR 1,43", "EUR 1,78", "EUR 1,90", "EUR 1,24", "EUR 1,41"];

var products = ["Popken", "Lucky Animal", "mein-terrarium", "zooup", "zoofair", "XL-Hundeshop", "tiierisch-de", "Zoo Galaxie", "Petshop", "Danto GmbH", "Heimtierbedarf-Mazinke", "TIERKOSMOS", "Gazoma", "Zooheld", "dasko24"];

var result = _.map(_.zip(products, prices), function(arr) {
    return {
        Price: arr[1],
        Name: arr[0]
    };
});


console.log(result);
票数 0
EN

Stack Overflow用户

发布于 2013-03-11 22:05:19

这是一个通用的解决方案--它将“折叠”一个对象,这样您就可以得到一个对象列表,而不是一个列表对象。

代码语言:javascript
运行
复制
function refold_list_from_object(data) {
    "use strict"    
    var keys = Object.keys(data),
        descriptor = {configurable: true, enumerable: true, writable: true, value: null},
        properties = keys.reduce(function(p, k){
            p[k] = descriptor
            return p
        }, {}),
        nrecords = Math.max.apply(null, keys.map(function(k){return data[k].length})),
        records  = [], vi
    function makerecord() {
        return Object.create(null, properties)
    }
    function record_from_value_index(vi) {
        return keys.reduce(function(obj, k) {
            obj[k] = data[k][vi] || null
            return obj
        }, makerecord())
    }
    for (vi = 0; vi < nrecords; vi++) {
        records.push(record_from_value_index(vi))
    }
    return records
}

data应该是一个具有按字段名索引的列表的对象:

代码语言:javascript
运行
复制
var data = {
    Price: ["EUR 1,99", "EUR 0,99", "EUR 4,99", "EUR 2,29", "EUR 1,43", "EUR 1,60", "EUR 1,79", "EUR 1,79", "EUR 1,39", "EUR 6,30", "EUR 1,43", "EUR 1,78", "EUR 1,90", "EUR 1,24", "EUR 1,41"],
    Name: ["Popken", "Lucky Animal", "mein-terrarium", "zooup", "zoofair", "XL-Hundeshop", "tiierisch-de", "Zoo Galaxie", "Petshop", "Danto GmbH", "Heimtierbedarf-Mazinke", "TIERKOSMOS", "Gazoma", "Zooheld", "dasko24"],
    // An extra field to demonstrate padding:
    Description: ['Foo', 'Bar', 'Baz']
}

var recordlist = refold_list_from_object(data)

recordlist将如下所示:

代码语言:javascript
运行
复制
[
  {"Price":"EUR 1,99", "Name":"Popken",         "Description":"Foo"},
  {"Price":"EUR 0,99", "Name":"Lucky Animal",   "Description":"Bar"},
  {"Price":"EUR 4,99", "Name":"mein-terrarium", "Description":"Baz"},
  {"Price":"EUR 2,29", "Name":"zooup",          "Description":null},
  {"Price":"EUR 1,43", "Name":"zoofair",        "Description":null},
  {"Price":"EUR 1,60", "Name":"XL-Hundeshop",   "Description":null},
  {"Price":"EUR 1,79", "Name":"tiierisch-de",   "Description":null},
  {"Price":"EUR 1,79", "Name":"Zoo Galaxie",    "Description":null},
  {"Price":"EUR 1,39", "Name":"Petshop",        "Description":null},
  {"Price":"EUR 6,30", "Name":"Danto GmbH",     "Description":null},
  {"Price":"EUR 1,43", "Name":"Heimtierbedarf-Mazinke", "Description":null},
  {"Price":"EUR 1,78", "Name":"TIERKOSMOS",     "Description":null},
  {"Price":"EUR 1,90", "Name":"Gazoma",         "Description":null},
  {"Price":"EUR 1,24", "Name":"Zooheld",        "Description":null},
  {"Price":"EUR 1,41", "Name":"dasko24",        "Description":null}
]
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15347186

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档