如何解决动态Javascipt数组操作
假设我有示例输入数据,
data = [
{ name : 'Alice',age : 21},{ name : 'Henry',age : 20 },{ name : 'Max',{ name : 'Jane',age : 21}
]
我想以某种方式合并它们并将这些数据转换为以下形式,
result = [
{ age : 20,name : ['Henry','Max'] },{ age : 21,name : ['Alice','Jane'] }
]
解决方法
您可以尝试我的代码:
let data = [
{ name : 'Alice',age : 21},{ name : 'Henry',age : 20 },{ name : 'Max',{ name : 'Jane',age : 21}
]
let r = []
data.map(d => {
b = r.find(a => a.age === d.age )
if (b) b.name.push(d.name)
else r.push({age: d.age,name: [d.name]})
})
console.log(r)
,
这是一个简单的示例,显示了迭代/映射/操作的类型,您可以根据需要将任意数据集转换为分组:
https://jsfiddle.net/6b2rp4n7/
const data = [
{ name : 'Alice',age : 21}
];
const mapping = new Map();
for (var i = 0; i < data.length; i++) {
const element = data[i];
for (const prop in element) {
const key = prop + "" + element[prop];
if (mapping.get(key) != null && mapping.get(key).val === element[prop]) {
const matches = mapping.get(key);
matches.list.push(element);
} else {
const matches = {val: element[prop],key: prop,list: [element]};
mapping.set(key,matches);
}
}
}
let result = [];
mapping.forEach((val,key) => {
if (val.list.length > 1) {
let res = { matches: val.list };
res[val.key] = val.val;
result.push(res);
}
});
console.log(result);
输出:
0:
age: 21
matches: Array(2)
0: {name: "Alice",age: 21}
1: {name: "Jane",age: 21}
1:
age: 20
matches: Array(2)
0: {name: "Henry",age: 20}
1: {name: "Max",age: 20}
我决定排除单个元素的所有分组,尽管它们也可能是有效的。我还把值操作留给了您-这里应该有足够的内容来建立您想要的数据结构。如果没有其他有关您要实现的目标及其原因的上下文,很难提供更多帮助。祝你好运!
,让我们动手做这把戏。这不是路线图的直接解决方案,但是一旦获得路线图,您就可以根据自己的需要将其缩小为一个功能。
data = [
{ name : 'Alice',age : 21}
]
现在我们需要通过循环搜索并将其减少到给定的唯一年龄值集 我们声明要使用的一组变量
var a = [];
var c= [];
var i;
var ii;
var iii;
var iv;
现在让我们遍历整个爵士乐;
for (i = 0; i < data.length; i++) {
a.push(data[i].age)
}
a=[...new Set(a)];
这为我们提供了年龄作为数据数组中数组的唯一值。问题一排序。现在,我们从新生成的唯一数组创建占位符数组
for (ii = 0; ii < a.length; ii++) {
c.push({'age':a[ii],'name':[]})
}
现在我们已经根据唯一数组设置了占位符,我们只需从中进行搜索和匹配即可 数据数组和填充名称数组的占位符数组。
for (iii = 0; iii < c.length; iii++) {
for (iv = 0; iv < data.length; iv++) {
if(data[iv].age == c[iii].age){c[iii].name.push(data[iv].name)}
}
}
真的很简单。您可以进行一些功能使其整洁,但这是解决此问题的最简单的路线图。
data = [
{ name : 'Alice',age : 21}
]
var a = [];
var c= [];
var i;
var ii;
var iii;
var iv;
for (i = 0; i < data.length; i++) {
a.push(data[i].age);
}
a=[...new Set(a)];
for (ii = 0; ii < a.length; ii++) {
c.push({'age':a[ii],'name':[]});
}
for (iii = 0; iii < c.length; iii++) {
for (iv = 0; iv < data.length; iv++) {
if(data[iv].age == c[iii].age){c[iii].name.push(data[iv].name);}
}
}
console.log(c);
请注意,这正是我所遇到的日常数据处理问题,因此我将函数合并到了JS框架中,该框架根据我们所拥有的值搜索,比较和填充数组。来源在这里。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。