我在图表中有一些边缘,我得到了:
const edges = getEdges();
每个边都有一个标签数组,我得到了:
const edges = getEdges().map(function (edge, i) {
return (i + 1) + '-' + getLabels(edge).sort().join('-');
});
因此,如果我有2条边,每条边有两个标签,我会得到一个数组
[
'1-label1-label2',
'2-label1-label2'
]
但我想要的是
[
'1-label1',
'2-label2',
'3-label1',
'4-label2'
]
所以我想我需要使用Array.reduce()
。
答案 0 :(得分:2)
使用Array#reduce
方法执行类似的操作。
const edges = getEdges().reduce(function(arr, edge) {
return arr.concat(
getLabels(edge)
.sort()
.map(function(v, i) {
return (arr.length + i) + '-' + v;
})
);
}, []);
使用Array#push
方法代替Array#concat
方法。
const edges = getEdges().reduce(function(arr, edge) {
[].push.apply(arr, getLabels(edge)
.sort()
.map(function(v, i) {
return (arr.length + i) + '-' + v;
})
);
return arr;
}, []);
答案 1 :(得分:0)
在我看来,map
或reduce
是你真正想要的,只是一对嵌套的forEach
(虽然我们可以用{{1}如果我们想要的话):
reduce
直播示例:
const edges = [];
getEdges().forEach(edge => {
getLabels(edge).sort().forEach(label => {
edges.push(`${(edges.length + 1)}-${label}`);
});
});
答案 2 :(得分:0)
您可以在边缘上使用reduce操作,它会获取每条边并添加到新构造的数组中。
在每个边缘的标签上使用forEach会产生1..n个项目,这些项目将添加到此新阵列中。使用新数组(结果)的当前长度可以巧妙地解决根据需要命名结果项的问题(即从1到N)。
i= 1;
if (i>0 && i<5) {
//if(MouseScrollUp)
//i++;
document.querySelector('.number').innerHTML = i;
//else if(MouseScrollDown)
//i--;
// document.querySelector('.number').innerHTML = number;
}
注意:此解决方案使用reduce和ES6功能,这是根据上述标记。
答案 3 :(得分:0)
您可以先将getEdges
的结果映射到getLabels
,然后使用Array.prototype.concat
和展开语法展平生成的数组。
const getEdges = () => ['a', 'b'];
const getLabels = () => ['label1', 'label2'];
const edges = [].concat(...getEdges().map(getLabels))
.map((label, i) => `${i + 1}-label`);
console.log(edges);
答案 4 :(得分:0)
您可以使用forEach
,而不是map
或reduce
。
工作代码 :( ES6)
const getEdges = () => [
'1-label1-label2',
'2-label1-label2'
];
const getLabels = (edge) => edge.split('-').sort();
let edges = [];
getEdges().forEach((edge) => {
getLabels(edge).forEach((label) => {
if(label.indexOf('label') > -1) {
edges.push(edges.length + 1 + '-' + label);
}
});
});
console.log(edges);
工作代码 :( ES5)
function getEdges() {
return [
'1-label1-label2',
'2-label1-label2'
];
}
function getLabels(edge) {
return edge.split('-').sort();
}
var edges = [];
getEdges().forEach(function (edge) {
getLabels(edge).forEach(function (label) {
if(label.indexOf('label') > -1) {
edges.push(edges.length + 1 + '-' + label);
}
});
});
console.log(edges);