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