Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/364.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
转换JavaScript数组中数据之间的关系_Javascript_Arrays - Fatal编程技术网

转换JavaScript数组中数据之间的关系

转换JavaScript数组中数据之间的关系,javascript,arrays,Javascript,Arrays,我有一个函数,它生成一个数组,由X个数组组成,其中包含Y个对象。这两个因素都传递给函数,以生成如下所示的数组: [ [ { '0': 3 }, { '1': 4 }, { '2': 6 }, 'Estimate:': '0jvyt8a' ], [ { '0': 4 }, { '1': 6 }, { '2': 3 }, 'Estimate:': 'mc973fs' ], [ { '0': 4 }, { '1': 1 }, { '2': 3 }, 'Estimate:': 'vwsfh8

我有一个函数,它生成一个数组,由X个数组组成,其中包含Y个对象。这两个因素都传递给函数,以生成如下所示的数组:

[
  [ { '0': 3 }, { '1': 4 }, { '2': 6 }, 'Estimate:': '0jvyt8a' ],
  [ { '0': 4 }, { '1': 6 }, { '2': 3 }, 'Estimate:': 'mc973fs' ],
  [ { '0': 4 }, { '1': 1 }, { '2': 3 }, 'Estimate:': 'vwsfh8k' ],
  [ { '0': 4 }, { '1': 3 }, { '2': 5 }, 'Estimate:': 'n6xzge3' ],
  [ { '0': 8 }, { '1': 7 }, { '2': 1 }, 'Estimate:': 'v0jn7bh' ]
]

我的问题是,有没有一种方法可以从这个结构转换这个数组。到如下所示的结构:

[
    [1,{1: "vwsfh8k"}, {2: "v0jn7bh"}]
    [3,{1: "0jvyt8a"}, {2: "mc973fs"}, {3:"vwsfh8k"}, {4:"n6xzge3"}]
]
基本上,我的目标是获取脚本生成的原始数组(见下文),并将其传递给另一个函数,以记录每个数字出现的次数以及它的“估计”数字

在这个例子中,我刚刚创建了0到10之间的随机数,所以一个选项是迭代并计算我猜的每个值,但不幸的是,我不能这样做,因为最终我将使用5个字母的组合而不是数字,但数字是最容易显示的示例和概念证明

所以,我想,我需要得到一个每个唯一值的数组,然后查看原始数组中的每个值,找出它所呈现的估计值。不幸的是,我甚至不知道从哪里开始,所以我希望你们能帮忙

生成随机数组的代码:

// Making an empty array
const arr = [];

//Generating the estimate IDs and placing them all in their own object in their own array.
function estimateGen(length, nodes) {
    for (var i = 0; i < length; i++)    {
        const estimate = [];
        let estimateVal = Math.random().toString(36).replace('0.','').slice(0,7);
        estimate[`Estimate:`] = estimateVal;
        arr.push(estimate);
        nodeGen(estimate, nodes)
    }
}

// Adding x amount of nodes between 1 and 10 into each estimate sub-array in their own objects.
function nodeGen(estimate, nodes) {
    for (var i = 0; i < nodes; i++) {
        const node = {};
        let nodeID = Math.floor(Math.random() * 10) + 1;
        node[i] = nodeID;
        estimate.push(node);

    }
}

// Calling the function and saying how many nodes per estimate we want.
estimateGen(5, 3);
console.log(arr);
有没有办法计算右边的值出现的次数,以及它出现在[0]的“估计”ID是多少


谢谢。

首先,让我们重新设计输入数据和结果,使其成为更有用的格式:

// input
[
  { nodes: [3, 4, 6], Estimate: '0jvyt8a' },
  { nodes: [4, 6, 3], Estimate: 'mc973fs' },
  { nodes: [4, 1, 3], Estimate: 'vwsfh8k' },
  { nodes: [4, 3, 5], Estimate: 'n6xzge3' },
  { nodes: [8, 7, 1], Estimate: 'v0jn7bh' }
];
// result
{
  1: ["vwsfh8k", "v0jn7bh"],
  3: ["0jvyt8a", "mc973fs", "vwsfh8k", "n6xzge3"],
  ...
]
那么代码就是:

const输入=[
{节点:[3,4,6],估计值:'0jvyt8a'},
{节点:[4,6,3],估计值:'mc973fs'},
{节点:[4,1,3],估计值:'vwsfh8k'},
{节点:[4,3,5],估计值:'n6xzge3'},
{节点:[8,7,1],估计值:'v0jn7bh'}
];
const result={};
input.forEach(({
节点,
估计数:e
}) =>
nodes.forEach(n=>{
如果(!结果[n]){
结果[n]=[];
}
结果[n]。推(e);
})
);

控制台日志(结果)我已重新格式化了您的数组。输出是不同的,但您仍然可以使用它

var-arr=[
{0':3,'1':4,'2':6,'估计:':'0jvyt8a'},
{0':4,'1':6,'2':3,'Estimate:':'mc973fs'},
{0':4,'1':1,'2':3,'Estimate:':'vwsfh8k'},
{0':4,'1':3,'2':5,'估计:':'n6xzge3'},
{0':8,'1':7,'2':1,'Estimate:':'v0jn7bh'}
];
var num=[1,3,4,5,6,7,8];
num=num.map(n=>
[n(
arr.filter(a=>[0,1,2]。一些(nm=>a[nm]==n))
.map(v=>v[“估计:”)
)]);

console.log(num)
对于获取计数对象,您可以将值作为键,并将
估计值
作为相同值计数的键

函数estimateGen(长度、节点){
var数组=[];
对于(变量i=0;i{
值。forEach(v=>{
r[v]=r[v]|{};
r[v][estimate]=(r[v][estimate]| | 0)+1;
});
返回r;
}, {});
}
var-temp=估算发电机(5,3);
控制台日志(temp);
控制台日志(计数(温度))

。作为控制台包装{最大高度:100%!重要;顶部:0;}
请添加有效的数据结构。您不能将键/值作为数组项。@NinaScholz您好,对不起,您能举例说明您的意思吗?您是指使用估算ID命名子数组吗?像``[estimate[{1:2}]``
[{0:3},{1:4},{2:6},-->“Estimate:”:“0jvyt8a”顺便说一句,数据与想要的结果有什么关系?@NinaScholz这样做的最佳方式是什么?我以前一直在尝试命名数组,但我无法让它工作,而是让它工作,并将信息保留在该数组中。谢谢你,这非常有效。你知道我如何编辑创建数组的代码,将其放入你的输入格式,以便我可以继续试验参数。我已经修改了你的生成代码以生成这种格式。
[
  [ 'p68xw8h', 5, 4, 6 ],
  [ 'wn2yoee', 5, 4, 5 ],
  [ '1w01tem', 9, 7, 4 ],
  [ 'we3s53f', 8, 8, 8 ],
  [ '5nrtp09', 3, 3, 8 ]
]
// input
[
  { nodes: [3, 4, 6], Estimate: '0jvyt8a' },
  { nodes: [4, 6, 3], Estimate: 'mc973fs' },
  { nodes: [4, 1, 3], Estimate: 'vwsfh8k' },
  { nodes: [4, 3, 5], Estimate: 'n6xzge3' },
  { nodes: [8, 7, 1], Estimate: 'v0jn7bh' }
];
// result
{
  1: ["vwsfh8k", "v0jn7bh"],
  3: ["0jvyt8a", "mc973fs", "vwsfh8k", "n6xzge3"],
  ...
]