【发布时间】:2021-04-06 00:29:53
【问题描述】:
我正在为每个与提供的键相同的值过滤一个数组。我确定有一个比我更好的人可以将其浓缩为一次性减少方法,但可惜的是 filter map filter map。
所以我向一个数组提交了一个对象,上面写着[{k:v}, {k2:otherv}],并找到所有不是那个的元素,然后返回那些对象键。
下面的代码返回:
[
{k: v1},
{k: v2},
{k: v3}
]
[
{k2: v4},
{k2: v5},
{k2: v6}
]
]
显然要正确映射它,就像它看起来一样
[{k:v1, k2:v4}, {k:v2,k2:v5}, {k:v3, k2:v6}]
我尝试了以下几个示例:
How can I merge two object arrays by index in JavaScript?
和
Combine same-index objects of two arrays
但没有将每个可能的对象键写入其中,我尝试过的方法都不起作用。
const blogkeys = cont
.filter((k) => k.type === "blogs")
.map(({ key, content }) => {
if (key.includes(".")) {
let objkey = key.substr(key.indexOf(".") + 1, key.length);
let obj = { [objkey]: content };
let arrName = key.substr(0, key.indexOf("."));
let pushedObj = { [arrName]: [{ ...obj }] };
return pushedObj;
} else {
let obj = { [key]: content };
return obj;
}
});
这会创建我们在父数组中寻找的键
const everyOtherBlog = blogkeys.map((blogkey) => {
const returned = blogs
.filter(
(f) =>
!JSON.stringify(f).includes(
JSON.stringify(blogkey).replace("{", "").replace("}", "")
)
)
.map(({ _doc }) => {
let obj = {};
Object.keys(_doc)
.filter((f) => f === Object.keys(blogkey)[0])
.map((a) => {
obj = Object.assign(obj, { [a]: _doc[a] });
return obj;
});
return obj[0];
});
return returned;
});
这将返回您看到的数据集。
这是 blogkeys 的样子:
[0] [
[0] { title: ' stuff' },
[0] {
[0] p1: ' stuff '
[0] }
[0] ]
由
制成 {
[0] _id: '606a4049d4812928986afc10',
[0] contentId: '60443ced4e233336f8306b5b',
[0] type: 'blogs',
[0] key: 'title',
[0] content: 'stuff'
[0] },
一个博客看起来像
{
title: '',
p1:''
}
这里的每个人都提供了很多很酷的东西,但由于我输入数据的方式而最终对我没有帮助,当我修复时,我意识到我不需要任何花哨的拉链,只是好的旧 object.fromEntries。虽然其中一些非常有趣,但我会留下这个。
任何帮助都会很棒
【问题讨论】:
-
您能否添加一个具体的输入数组示例和您想要的确切输出值?这很有趣,但我还没有完全理解它。
-
你可以使用
{...obj1, ...obj2}在不知道键的情况下组合两个对象。
标签: javascript arrays