如何将对象数组与对象数组jQuery组合或合并



我在控制台中有这样的对象:

ObjectName1 : Array(3)
0 : { id : 1, name : 'foo' },
1 : { id : 2, name : 'foo-2' },
2 : { id : 3, name : 'foo-3' },
ObjectName2 : Array(3)
0 : { id : 1, foo : 'bar' },
1 : { id : 2, foo-2 : 'bar-2' },
2 : { id : 3, foo-3 : 'bar-3' },

和通常要获取名称,只需写下: ObjectName1[key].name对吗?

现在,如果我想从 ObjectName2(foo,foo-2,foo-3)获得key,如何使用ObjectName1中的valueObjectName2获取key

我写过这样的书:

// just say there is an each above this comment
     var name = ObjectName1[key].name;
     var bar  = ObjectName2[key]+"."+name;
// end each 

,但它只是显示

[对象对象] .foo

[对象对象] .foo-2

[对象对象] .foo-3

输出应该像这样:

bar
bar-2
bar-3

可以像我想做的那样做吗?如果可能的话,请帮我

任何帮助将不胜感激。

*注意:我不确定我的问题的情况是什么,所以如果标题出错了,请原谅我

谢谢

尝试这个。通过ObjectName1对象中的每个对象循环并在适当的索引中获取名称,此名称将是ObjectName2对象的键。然后使用该键从ObjectName2

打印适当的值

var ObjectName1 = [{'id' : 1, 'name' : 'foo'}, {'id' : 2, 'name' : 'foo-2'}, {'id' : 3, 'name' : 'foo-3'}];
var ObjectName2 = [{'id' : 1, 'foo' : 'bar'}, {'id' : 2, 'foo-2' : 'bar-2'}, {'id' : 3, 'foo-3' : 'bar-3'}];
for(var i = 0; i < ObjectName2.length; i++){
    console.log(ObjectName2[i][ObjectName1[i]['name']]);
}

类似的东西?

var name = ObjectName1[key].name;
ObjectName2.forEach(function(a) {
  if (a.keys().includes(name)) {
    var bar = a[name];
    // then do what you want with bar
  }
}

如所注释的,您的key是对象。因此,它显示[Object object].foo-3

您将必须使用2个循环,并检查键是否在当前对象内部。如果是,请打印,否则继续。

var ObjectName1 =[
  { id : 1, name : 'foo' },
  { id : 2, name : 'foo-2' },
  { id : 3, name : 'foo-3' },
]
var ObjectName2 = [
  { id : 1, foo : 'bar' },
  { id : 2, 'foo-2' : 'bar-2' },
  { id : 3, 'foo-3' : 'bar-3' },
];
ObjectName1.forEach(function(obj){
  ObjectName2.forEach(function(obj2){
    var key = obj.name;
    if(key in obj2){
      console.log(obj2[key])
    }
  })
})

现在,如果我想从 ObjectName2(foo,foo-2,foo-3)获取键,如何使用ObjectName1的值从ObjectName2获取键?

如果您知道这些是平行数组(其中一个数组中的[0]是有意与另一个数组中的[0]匹配),则可以简单地循环:

ObjectName1.forEach(function(entry1, index) {
    var value = ObjectName2[index][entry1.name];
    console.log(entry1.name + " = " + value);
});

示例:

var ObjectName1 = [
{ id : 1, name : 'foo' },
{ id : 2, name : 'foo-2' },
{ id : 3, name : 'foo-3' }
];
var ObjectName2 = [
{ id : 1, "foo" : 'bar' },
{ id : 2, "foo-2" : 'bar-2' },
{ id : 3, "foo-3" : 'bar-3' }
];
ObjectName1.forEach(function(entry1, index) {
    var value = ObjectName2[index][entry1.name];
    console.log(entry1.name + " = " + value);
});

假设您知道它们是平行数组。

如果没有,则必须搜索它。Array.prototype.findIndex将返回回调返回true的第一个元素的索引:

ObjectName1.forEach(function(entry1) {
    console.log("entry1.name = " + entry1.name);
    var index = ObjectName2.findIndex(function(entry2) {
        // See if entry2 contains a key with that value
        return entry1.name in entry2;
    });
    console.log(index == -1 ? "Not found" : ("Found at index #" + index + ", value = " + ObjectName2[index][entry1.name]));
});

示例:

var ObjectName1 = [
{ id : 1, name : 'foo' },
{ id : 2, name : 'foo-2' },
{ id : 3, name : 'foo-3' }
];
var ObjectName2 = [
{ id : 1, "foo" : 'bar' },
{ id : 2, "foo-2" : 'bar-2' },
{ id : 3, "foo-3" : 'bar-3' }
];
ObjectName1.forEach(function(entry1) {
    console.log("entry1.name = " + entry1.name);
    var index = ObjectName2.findIndex(function(entry2) {
        // See if entry2 contains a key with that value
        return entry1.name in entry2;
    });
    console.log(index == -1 ? "Not found" : ("Found at index #" + index + ", value = " + ObjectName2[index][entry1.name]));
});

如果您真的不需要ObjectName2中匹配对象的(例如索引),则仅使用 find

ObjectName1.forEach(function(entry1) {
    console.log("entry1.name = " + entry1.name);
    var entry = ObjectName2.find(function(entry2) {
        // See if entry2 contains a key with that value
        return entry1.name in entry2;
    });
    console.log(!entry ? "Not found" : ("Found, value is " + entry[entry1.name]));
});

示例:

var ObjectName1 = [
{ id : 1, name : 'foo' },
{ id : 2, name : 'foo-2' },
{ id : 3, name : 'foo-3' }
];
var ObjectName2 = [
{ id : 1, "foo" : 'bar' },
{ id : 2, "foo-2" : 'bar-2' },
{ id : 3, "foo-3" : 'bar-3' }
];
ObjectName1.forEach(function(entry1) {
    console.log("entry1.name = " + entry1.name);
    var entry = ObjectName2.find(function(entry2) {
        // See if entry2 contains a key with that value
        return entry1.name in entry2;
    });
    console.log(!entry ? "Not found" : ("Found, value is " + entry[entry1.name]));
});

最新更新