合并两个javascript对象

合并两个javascript对象,javascript,Javascript,假设我们在数组上有一个java脚本对象,如下所示: 假设我有一个可变的图书集合 var books ={ { id: 1, name: 'Physics' } { id: 2, name: 'Mathematics' } { id: 3, name: 'Chemistry' } } 假设每个作家在他们的信息中都有一个书名,就像这样 var writers ={ { id: 123, name

假设我们在数组上有一个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,但它变得非常复杂,就像循环中的循环太多一样。我认为确实有很好的方法:)

还有吗


谢谢

如果两个对象都有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的书籍。
由于数组结果[0]将是id为“X”的书。

您可以使用2
进行循环,但不是那样complicated@BasPauw你能告诉我该怎么做吗?
books.forEach(b=>b.writers=writers.filter(w=>w.book==b.name))
这实际上是书籍和编写器数组吗我们在数组“”上有一个java脚本对象?@Sinisake对象在数组上按预期工作,感谢您没有使用外部5kb,如loadsh:)