gpt4 book ai didi

javascript - 选择包含对象的数组对象

转载 作者:行者123 更新时间:2023-11-30 08:27:25 27 4
gpt4 key购买 nike

我有一个对象数组,就像这个例子:

var b = [
{
'attribute[170]': "41",
'attribute[171]': "15",
'data': 1,
'something': 'some text'
},
{
'attribute[150]': "401",
'attribute[181]': "5",
'test': '1234',
'data': 2.3
}
];

我想从 b 中的数组中选择包含对象 a 属性的对象

var a = {
'attribute[170]': "41",
'attribute[171]': "15"
};

这可能吗,也许使用 jQuery.grep 或映射? (我正在使用 jQuery。)

最佳答案

您可以使用 filter 循环遍历 b,并循环遍历 a 的属性以查找 中每个条目的匹配项b。提前获取 a 的属性列表会很有用。

var aprops = Object.keys(a);
var c = b.filter(function(entry) {
return aprops.every(function(key) {
return entry[key] === a[key];
});
});

var b = [
{
'attribute[170]': "41",
'attribute[171]': "15",
'data': 1,
'something': 'some text'
},
{
'attribute[150]': "401",
'attribute[181]': "5",
'test': '1234',
'data': 2.3
}
];
var a = {
'attribute[170]': "41",
'attribute[171]': "15"
};

var aprops = Object.keys(a);
var c = b.filter(function(entry) {
return aprops.every(function(key) {
return entry[key] === a[key];
});
});
console.log(c);

或者使用 ES2015+ 语法:

const aprops = Object.keys(a);
const c = b.filter(entry => aprops.every(key => entry[key] === a[key]));

const b = [
{
'attribute[170]': "41",
'attribute[171]': "15",
'data': 1,
'something': 'some text'
},
{
'attribute[150]': "401",
'attribute[181]': "5",
'test': '1234',
'data': 2.3
}
];
const a = {
'attribute[170]': "41",
'attribute[171]': "15"
};

const aprops = Object.keys(a);
const c = b.filter(entry => aprops.every(key => entry[key] === a[key]));
console.log(c);

这为您提供了一个包含所有 匹配对象的数组。如果您只想要第一个匹配的对象,而不是数组中的对象,您可以使用 find(在 ES2015 中添加,也称为 ES6,但很容易填充/填充)而不是 filter:

var aprops = Object.keys(a);
var c = b.find(function(entry) {
return aprops.every(function(key) {
return entry[key] === a[key];
});
});

var b = [
{
'attribute[170]': "41",
'attribute[171]': "15",
'data': 1,
'something': 'some text'
},
{
'attribute[150]': "401",
'attribute[181]': "5",
'test': '1234',
'data': 2.3
}
];
var a = {
'attribute[170]': "41",
'attribute[171]': "15"
};

var aprops = Object.keys(a);
var c = b.find(function(entry) {
return aprops.every(function(key) {
return entry[key] === a[key];
});
});
console.log(c);

或者使用 ES2015+ 语法:

const aprops = Object.keys(a);
const c = b.find(entry => aprops.every(key => entry[key] === a[key]));

const b = [
{
'attribute[170]': "41",
'attribute[171]': "15",
'data': 1,
'something': 'some text'
},
{
'attribute[150]': "401",
'attribute[181]': "5",
'test': '1234',
'data': 2.3
}
];
const a = {
'attribute[170]': "41",
'attribute[171]': "15"
};

const aprops = Object.keys(a);
const c = b.find(entry => aprops.every(key => entry[key] === a[key]));
console.log(c);

关于javascript - 选择包含对象的数组对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43365215/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com