从数组中提取元素绘制矩形
Extracting elements from an array to draw a rectangle
旨在绘制四个矩形,其参数在两个数组中可用。
我发现了一个使用 array.map() 函数的方法。
但是,有什么功能或更快的方法可以做到这一点吗?
感谢您的帮助。
let arr1=[{x:20, y:50, l:100, h:30},{x:220, y:250, l:100, h:30}];
let arr2=[{x:30, y:100, l:5, h:30},{x:320, y:350, l:100, h:30}]
function setup() {
createCanvas(400, 400);
}
function draw() {
background(220);
let arr_x = arr1.map(a => a.x).concat(arr2.map(a => a.x));
let arr_y = arr1.map(a => a.y).concat(arr2.map(a => a.y));
let arr_l = arr1.map(a => a.l).concat(arr2.map(a => a.l));
let arr_h = arr1.map(a => a.h).concat(arr2.map(a => a.h));
for(let i=0; i<arr_x.length; i++){
rect(arr_x[i], arr_y[i], arr_l[i], arr_h[i]);
}
}
如果对象始终具有该顺序的属性,您调用 Object.values
并传播到 rect
调用:
const rect = console.log;
let arr1=[{x:20, y:50, l:100, h:30},{x:220, y:250, l:100, h:30}];
let arr2=[{x:30, y:100, l:5, h:30},{x:320, y:350, l:100, h:30}]
function draw() {
for (const obj of arr1.concat(arr2)) {
rect(...Object.values(obj));
}
}
draw();
或者,不依赖 属性 命令:
const rect = console.log;
let arr1=[{x:20, y:50, l:100, h:30},{x:220, y:250, l:100, h:30}];
let arr2=[{x:30, y:100, l:5, h:30},{x:320, y:350, l:100, h:30}]
function draw() {
for (const obj of arr1.concat(arr2)) {
rect(obj.x, obj.y, obj.l, obj.h);
}
}
draw();
尝试一次调用 concat
(或传播)和一次 forEach
循环。
let arr1=[{x:20, y:50, l:100, h:30},{x:220, y:250, l:100, h:30}];
let arr2=[{x:30, y:100, l:5, h:30},{x:320, y:350, l:100, h:30}];
function setup() {
createCanvas(400, 400);
}
function draw() {
background(220);
[...arr1, ...arr2].forEach(({x , y, l, h}) => rect(x, y, l, h));
// arr1.concat(arr2).forEach(({x , y, l, h}) => rect(x, y, l, h));
}
旨在绘制四个矩形,其参数在两个数组中可用。
我发现了一个使用 array.map() 函数的方法。
但是,有什么功能或更快的方法可以做到这一点吗?
感谢您的帮助。
let arr1=[{x:20, y:50, l:100, h:30},{x:220, y:250, l:100, h:30}];
let arr2=[{x:30, y:100, l:5, h:30},{x:320, y:350, l:100, h:30}]
function setup() {
createCanvas(400, 400);
}
function draw() {
background(220);
let arr_x = arr1.map(a => a.x).concat(arr2.map(a => a.x));
let arr_y = arr1.map(a => a.y).concat(arr2.map(a => a.y));
let arr_l = arr1.map(a => a.l).concat(arr2.map(a => a.l));
let arr_h = arr1.map(a => a.h).concat(arr2.map(a => a.h));
for(let i=0; i<arr_x.length; i++){
rect(arr_x[i], arr_y[i], arr_l[i], arr_h[i]);
}
}
如果对象始终具有该顺序的属性,您调用 Object.values
并传播到 rect
调用:
const rect = console.log;
let arr1=[{x:20, y:50, l:100, h:30},{x:220, y:250, l:100, h:30}];
let arr2=[{x:30, y:100, l:5, h:30},{x:320, y:350, l:100, h:30}]
function draw() {
for (const obj of arr1.concat(arr2)) {
rect(...Object.values(obj));
}
}
draw();
或者,不依赖 属性 命令:
const rect = console.log;
let arr1=[{x:20, y:50, l:100, h:30},{x:220, y:250, l:100, h:30}];
let arr2=[{x:30, y:100, l:5, h:30},{x:320, y:350, l:100, h:30}]
function draw() {
for (const obj of arr1.concat(arr2)) {
rect(obj.x, obj.y, obj.l, obj.h);
}
}
draw();
尝试一次调用 concat
(或传播)和一次 forEach
循环。
let arr1=[{x:20, y:50, l:100, h:30},{x:220, y:250, l:100, h:30}];
let arr2=[{x:30, y:100, l:5, h:30},{x:320, y:350, l:100, h:30}];
function setup() {
createCanvas(400, 400);
}
function draw() {
background(220);
[...arr1, ...arr2].forEach(({x , y, l, h}) => rect(x, y, l, h));
// arr1.concat(arr2).forEach(({x , y, l, h}) => rect(x, y, l, h));
}