【问题标题】:Merging two javascript objects [duplicate]合并两个javascript对象[重复]
【发布时间】:2017-01-06 12:36:53
【问题描述】:

假设我们在数组上有一个 java 脚本对象,如下所示:

假设我有一个可变的书籍,其中包含书籍的集合

var books ={
  {
    id: 1,
    name: 'Physics'
 }
 {
    id: 2,
    name: 'Mathematics'
 }
 {
    id: 3,
    name: 'Chemistry'
 }
}

假设每个作家在他们的信息中都有一个像这样的书名

var writers ={

    {
        id: 123,
        name: 'William Jeff',
        book:  'Physics'
    },

    {
        id: 123123,
        name: 'John Doe',
        book: 'Mathematics'
    },
    {
        id: 1212312323,
        name: 'asd Doe',
        book: 'Chemistry'
    },
    {
        id:123123,
        name: 'ASD DAS',
        book:'Physics'
    }
}

我想将这些 javascript 对象合并到这个:

var result = {
    {
    id: 1,
    name: 'Physics',
    writers : {
        {
            id: 123,
            name: 'William Jeff',
        },
        {
            id:123123,
            name: 'ASD DAS',
        }
    },

    {
        id: 2,
        name: 'Mathematics'
        writers : {
            {
                id: 123123,
                name: 'John Doe',
            }
        },
     }
    {
        id: 3,
        name: 'Chemistry',
        writers : {
            {
                id: 1212312323,
                name: 'asd Doe',
            },
        },
     }
}

我尝试使用下划线 foreach,但它变得非常复杂,比如循环内的循环太多。我认为肯定有很好的方法来做到这一点:)

还有吗?

谢谢

【问题讨论】:

  • 你可以只使用 2 个for 循环,这并不复杂
  • @BasPauw 你能指导我怎么做吗?
  • books.forEach(b => b.writers = writers.filter(w => w.book == b.name)) 就是这样
  • 书籍和作者实际上是数组吗? '我们在数组上有一个 java 脚本对象'?
  • @Sinisake 数组上的对象

标签: javascript


【解决方案1】:

如果两个对象都有 id,你可以迭代它们:

var books = { 1: { id: 1, name: "Math" }, ...}
var writers = { 1: { id:1, name: "John Doe", book: "Math"}, ...}

或者将它们声明为数组:

var books = [{ id: 1, name: "Math" }, ...]
var writers = [{ id:1, name: "John Doe", book: "Math"}, ...]

然后你可以做for循环

var result = {}; //or as an array
for(bookKey in books){
    var book = books[bookKey];
    for(writerKey in writers){
        var writer = writers[writerKey];
        if(writer.book == book.name){
            result[bookKey] = { //for an array: result.push(object)
                id: book.id,
                name: book.name,
                writer: {
                    id: writer.id,
                    name: write.name
                }
            }
        }
    }
}

作为一个对象,结果[1] 将是 id 为 1 的书。 作为数组 result[0] 将是 ID 为“X”的书。

【讨论】:

  • 它按预期工作,感谢您不使用像 loadsh 这样的外部 5kb :)
猜你喜欢
  • 2018-06-25
  • 1970-01-01
  • 1970-01-01
  • 2014-02-10
  • 2020-05-16
  • 1970-01-01
  • 2016-10-03
  • 2016-12-31
  • 2018-05-04
相关资源
最近更新 更多