如何将对象数组与对象数组Jquery

时间:2017-09-27 09:40:57

标签: javascript 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对吗?

现在,如果我想从key(foo,foo-2,foo-3)获取ObjectName2如何使用{keyObjectName2获取value {1}}来自ObjectName1

我写的是这样的:

// 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

有可能像我想做的那样吗?如果有可能请帮帮我

任何帮助都将非常感激。

*注意:我不确定我的问题中的案例名称是什么,所以如果标题出错,请原谅我

感谢

4 个答案:

答案 0 :(得分:1)

试试这个。遍历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']]);
}

答案 1 :(得分:0)

  

现在,如果我想从ObjectName2(foo,foo-2,foo-3)获取密钥,如何使用ObjectName2中的值从ObjectName1获取密钥?< / p>

如果你知道那些是并行数组(其中一个数组中的[0]有意与另一个数组中的[0]匹配),你可以简单地遍历:< / p>

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

示例:

&#13;
&#13;
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);
});
&#13;
&#13;
&#13;

假设您知道他们是并行数组。

如果没有,您必须搜索它。 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]));
});

示例:

&#13;
&#13;
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]));
});
&#13;
&#13;
&#13;

如果您真的不需要ObjectName2中匹配对象的(例如索引),只需要对象,请改用find:< / p>

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]));
});

示例:

&#13;
&#13;
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]));
});
&#13;
&#13;
&#13;

答案 2 :(得分:0)

这样的东西?

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
  }
}

答案 3 :(得分:0)

如评论所述,您的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])
    }
  })
})