javascript - 对象操作:组合集合的两个条目
问题描述
您将采取什么过程将具有 3 个键/值对的对象数组转换为包含所有键/值对组合的对象组合数组?...数组可以是任意大小。
例子:
var input = [
{keyA: "value1a", keyB: "value1b", keyC: "value1c"},
[keyA: "value2a", keyB: "value2b", keyC: "value2c"}
];
转换为:
var output = [
{keyA: "value1a", keyB: "value1b", keyC: "value1c"},
{keyA: "value1a", keyB: "value1b", keyC: "value2c"},
{keyA: "value1a", keyB: "value2b", keyC: "value1c"},
{keyA: "value1a", keyB: "value2b", keyC: "value2c"},
{keyA: "value2a", keyB: "value1b", keyC: "value1c"},
{keyA: "value2a", keyB: "value1b", keyC: "value2c"},
{keyA: "value2a", keyB: "value2b", keyC: "value1c"},
{keyA: "value2a", keyB: "value2b", keyC: "value2c"},
// etc.
];
我不是 100% 确定如何处理它,就数组而言,我知道使用 3 个数组我会做 3 个嵌套循环 concat 或推入单个数组。但是,对于对象,我正在绘制空白。我可以将每个属性中的每个值推送到它们自己的数组中,并使用嵌套循环迭代每个值,但相信有更好的方法。
目前,我完全如上所述。
let a = [];
let b = [];
let c = [];
inputs.forEach(input => {
a.push(input.key1);
b.push(input.key2);
c.push(input.key3);
});
let output = [];
a.forEach(x => {
b.forEach(y => {
c.forEach(z => {
let result = {};
result.a = x;
result.b = y;
result.c = z;
output.push(result);
});
});
});
但是必须想象有一种更好的方法,我就是无法理解。
解决方案
这将对您有所帮助。
var len=2;
var Arr=[];
for(var i=1;i<=len;i++)
{
for(var j=1;j<=len;j++)
{
for(var k=1;k<=len;k++)
{
var obj={
keyA:"value"+i+"a",
keyB:"value"+j+"a",
keyC:"value"+k+"a"
};
Arr.push(obj);
}
}
}
console.log(Arr);
推荐阅读
- prestashop - Prestashop - 在 actionProductUpdate 之后调用了哪个 SQL?
- javascript - Lodash - 不同身份的DifferenceBy
- latex - 编号乳胶表示 - 计数问题
- c# - 带有 Objective-C 网络扩展的 MacOS C# Xamarin 应用程序
- docker - 如何解决新部署应用程序DOKKU后丢失上传文件的问题
- c# - 将 Restsharp 调用转换为异步调用
- c# - Xamarin Forms在按钮按下时将视图添加到页面?
- c++ - 如何将 const char* [] 转换为单个内存块,例如 char* ptr
- windows-10 - 如果我无法在 Python shell 和 Windows 10 中的 IDLE 中键入双下划线怎么办?
- ruby - 我可以使用这种表示法在对象上调用自定义方法吗?