【问题标题】:Combining two arrays into an object将两个数组组合成一个对象
【发布时间】:2022-01-04 06:44:32
【问题描述】:

我有两个数组,一个带有日期标签,即 [Date, Date, Date ...] 和

另一个具有实际日期数据,即 [2021-11-26, 2021-11-25, ...]。

我想组合这两个数组,以便得到对象数组,例如 [ { Date: 2021-11-26}, {Date:2021-11-25}, {..}, ...]。

这两种方法我都试过了

obj = {};

for (var i = 0, l = date_label.length; i < l; i += 1) {
    obj[date_label[i]] = data_date[i]
}
console.log(obj);

_.zipObject(date_label, data_date);

但是它最终只给了我数据集的最后一个日期,在一个对象数据结构中,即 { Date: 1999-11-24}

【问题讨论】:

    标签: javascript arrays object


    【解决方案1】:

    对象/关联数组中的键是唯一的。你的obj 就是这样的东西。如果你把它变成一个普通的数组,然后把新的对象压进去,它就可以工作了。

    const obj = [];
    for (let i = 0, l = date_label.length; i < l; i++) {
        obj.push({[date_label[i]]: data_date[i]})
    }
    console.log(obj);
    

    您可能应该断言您的两个数组具有相同的长度。

    【讨论】:

      【解决方案2】:

      您面临的问题是您的 date_label 是相同的,并且循环正在替换同一标签上的日期,一次又一次,您只需要更改标签名称并赋予每个标签唯一的名称,或者将它们更改为循环也是这样 (obj[date_label[i] + str(i)] = data_date[i])。

      date_label = ['date1', 'date2', 'date3', .....]
      
      obj = {};
      
      for (var i = 0, l = date_label.length; i < l; i += 1) {
          obj[date_label[i]] = data_date[i]
      }
      console.log(obj);
      

      【讨论】:

        【解决方案3】:

        obj 的类型是数组而不是对象。 data_date 需要是字符串格式。

        for(var i= 0; i<data_date.length-1;i++) {
        obj.push({"Date":date_date[i]}) }
        

        【讨论】:

          【解决方案4】:

          使用数组减少 https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/Reduce

          var myFinalArray = data_date.reduce(
          (previousValue, currentValue, currentIndex, array) => ({ 
              currentValue: date_label[currentIndex]
          }), {});
          

          【讨论】:

            【解决方案5】:

            你好 AshleyCrasto

            欢迎来到 Stackoverflow。

            Sol:嗯,其他成员已经给出了如何达到预期结果的解决方案。我会强调为什么你会得到单个对象。

            它只会在对象数据结构中给我数据集的最后一个日期,即 { Date: 1999-11-24}

            您需要了解引用在 JavaScript 中的工作原理。这就是问题所在,

            因为date_label中的值都是一样的

            [日期,日期,日期...]

            当你使用时,

            obj[date_label[i]] = data_date[i] 
            

            每次执行时,相同的键值都会不断更新,而不是创建新键和新值。因为相同的值拥有相同的引用。

            所以,第一次 {"date" : "somevalue"} 会在那里,然后 第二次 {"date" : "somevalue2"},键 "date" 的值将被更新 具有新的价值。这是由于相同的密钥。

            因此,你需要把这个东西拿走。为了您更好地理解,这里是我的代码:(与其他人相同,但精心制作)

            const date_label = ["date","date"]
            const data_date = [2021-11-26, 2021-11-25]
            
            function returnObj(label, value){
            //this will return a new object with provided label and value.
                const Obj =  {};
                Obj[label] = value
                return Obj
            }
            let listOfObjects = []
            for(let i=0 ; i< date_label.length ; i++){
            //new object will be added to list.
                const obj = returnObj(date_label[i],data_date[i])
                listOfObjects.push(obj)
            }
            
            console.log(listOfObjects)
            

            【讨论】:

              猜你喜欢
              • 2016-11-12
              • 2017-02-04
              • 1970-01-01
              • 1970-01-01
              • 2012-03-04
              • 2018-11-17
              • 2018-09-21
              • 1970-01-01
              相关资源
              最近更新 更多