Javascript 如何组合具有相同索引的数组对象?

Javascript 如何组合具有相同索引的数组对象?,javascript,Javascript,我有一个数组对象: var a = {1: "one", 2: "two", 3: "three"}; 这个呢 var b = {1: "ONE", 2: "TWO", 4: "four"}; 我需要将两者结合起来,这样输出结果如下: var c = {1: "oneONE", 2: "twoTWO", 3:"three", 4: "four"}; 我很难让它工作。请帮忙 编辑: 好吧,所以我对问题的简化没有多大意义 我正在使用Firebase存储数据 var dates = [];

我有一个数组对象:

var a = {1: "one", 2: "two", 3: "three"};
这个呢

var b = {1: "ONE", 2: "TWO", 4: "four"};
我需要将两者结合起来,这样输出结果如下:

var c = {1: "oneONE", 2: "twoTWO", 3:"three", 4: "four"};
我很难让它工作。请帮忙

编辑: 好吧,所以我对问题的简化没有多大意义

我正在使用Firebase存储数据

   var dates = [];
   var ids = [];
   snapshot.forEach(function(childSnapshot) { //makes raw data array
   var date = childSnapshot.val().date;
   var id = childSnapshot.val().task_id;

   dates.push(date);
   ids.push(id);          
   });

   function cal_list(names, values) { // makes the array read
         var result = [];
         for (var i = 0; i < names.length; i++){
          if(result[names[i]] === undefined) {
              result[names[i]] = values[i];
          }
          else {
              // How do I add the values[i] to the existing date index?
              // if i used result[names[i]] = values[i] -- it only holds a single date. I need a way to add the value to an existing date.


          }

            };

  var calendar_list = cal_list(dates, ids);
  populateCal(calendar_list); //Successfully populates cal, but i'm missing tasks.
  console.log(result);
var日期=[];
var-id=[];
forEach(函数(childSnapshot){//生成原始数据数组
var date=childSnapshot.val().date;
var id=childSnapshot.val().task_id;
日期。推送(日期);
id.push(id);
});
函数cal_list(名称、值){//使数组读取
var结果=[];
对于(var i=0;i
控制台显示:
{12-04-2013:”,
12-05-2013: "", 
12-06-2013:“}

它将覆盖索引,并仅存储上次运行的值。我需要一种方法来组合相似日期的值,因此最终结果如下所示:

{12-04-2013:”,
12-05-2013: "",
12-06-2013:“}

edit2:我之所以需要这种格式,是因为我使用的是Calendario JQuery插件。数据需要采用特定的格式


edit3:修复了原始代码。我想?

在我们这里的长评论线程之后,我想这就是您需要的:

function cal_list(names, values) {
    var result = [], i, n, doubleFound;
    for (i = 0; i < names.length; i++){
        /* If you want to avoid double keys (only the first-one will stay):
        for (n = 0; n < result.length; n++) {
            if (names[i] in result[n]) {
                doubleFound = true;
                break;
            }
        if (doubleFound) {
            doubleFound = false;
            continue;
        }
       */
        result[i] = {};
        result[names[i]] = values[i];
    }
    return result;
}
函数校准列表(名称、值){
var result=[],i,n,doubleFound;
对于(i=0;i
您的数组是无效的JS。到目前为止,您的组合代码是什么样子的?不,它们被称为无效JS:)。可能您的意思是
a={'1':'one',…}
,它实际上是一个对象。或者
[{'1':'one'},{'2':'two'},]
,当你有一个对象数组时。是的,我没有正确阅读代码。漫长的一天…你应该阅读控制台:
[对象,对象,对象,对象,对象,对象,对象,12-04-2013:,12-05-2013:,12-06-2013:]
我似乎无法让您的代码片段正常工作:/:)几乎在那里?正如我在以前的评论中所说,有必要知道
什么是“childSnapshot”
…以及它包含什么?“DataSnapshot包含来自Firebase位置的数据。每当您读取Firebase数据时,您都会以DataSnapshot的形式接收数据。”“回调接收数据的快照。快照是特定Firebase位置在单个时间点的数据图片。它包含该位置的所有数据,包括任何子数据。如果要将此数据转换为本机格式(例如web上的JavaScript对象或Objective-C中的字典),您必须明确地这样做。“不确定如何最好地回答您的问题:/So childSnapshot是我在主DataSnapshot中循环的方式..这有意义吗?每个日期+任务组合在Firebase中存储为单个对象..在我看来,它在控制台中的日志记录是正确的,除了前面的
对象
s。我认为您需要过滤掉
名称[I]
作为一个对象,即
如果(名称类型[i]=='object')继续;
作为
for
循环中的第一条语句。此解决方案假定
名称
包含字符串,而不是
日期
对象。