function arrayWindow(array, n) {
if (array.length < n || n <= 0) {
return []
}
let arrayLength = array.length
let result = []
for (let i = 0; i < arrayLength; i++) {
let slicedArray = array.slice(i, n+i)
if (slicedArray && slicedArray.length === n) {
result.push(slicedArray)
continue
}
break
}
return result
}
let arr = [1, 2, 3, 4, 5, 6]
console.log(arrayWindow(arr, 2))
console.log(arrayWindow(arr, 3))
console.log(arrayWindow(arr, 4))
console.log(arrayWindow(arr, 5))
console.log(arrayWindow(arr, 10))
console.log(arrayWindow(arr, 0))
带有<html>
<svg></svg>
<script src="d3.v4.min.js"></script>
<script>
var svg = d3.select("svg")
.attr("width", 1000)
.attr("height", 500)
;
for (var i=0;i<3;i++) {
svg.append("rect")
.attr("x",i*80)
.attr("y",i*40)
.attr("width",30)
.attr("height",30)
;
}
svg.selectAll("rect")
.transition()
.duration(500)
.attr("x",2*d3.select(this).attr("x"))
;
</script>
</html>
的行返回错误。那么,读取每个元素的d3.select(this).attr("x")
attr的正确代码是什么?
答案 0 :(得分:3)
attr
的{{1}}函数采用值或函数。在您的示例中,您正在为其传递一个常量值(该值应该是函数的主体)。
因此,d3
将对范围内的任何d3.select(this)
(最可能是this
对象)进行操作。而是将其包装在如下函数中:
global
或者,您可以使用以下方法(取决于版本)
.attr("x", function() { 2 * d3.select(this).attr("x"); })
请注意,目前您还没有对.attr("x", (d, i, elements) => 2 * d3.select(elements[i]).attr("x"));
值应用任何保护,在尝试对任何值进行算术运算之前,我会认真考虑将其通过x
扔掉它。