Ich habe eine Reihe von Objekten, die dynamische Daten von einem CMS sind. Ich möchte sie anhand einer Versatznummer aufteilen können. Ich habe versucht, Destrukturierung zu verwenden, habe aber einen Fehler bei der Verwendung erhalten.

Ungefangener SyntaxError: Das Rest-Element muss das letzte Element sein

Ich habe zuerst dieses einfache Setup ausprobiert, bei dem ich das letzte Element von den ersten Elementen trennen konnte, aber ich habe herausgefunden, dass Sie eine solche Destrukturierung nicht verwenden können.

const cmsData = [{..},{..},{..},{..}]
const arr = [...firstItems, last] = cmsData

Ich versuche, eine Funktion zu haben, mit der ich einen Versatzwert übergeben kann, damit ich die ersten Elemente bis zur Versatznummer und zuletzt die Elemente mit der Versatznummer bekomme. beispielsweise.

const offset = 2;
const cmsData = [{..},{..},{..},{..}]
firstItems = [{..},{..}];
last = [{..},{..}];

Wenn Offset = 3 ist, ist der letzte der letzte 3.

0
me-me 18 Jän. 2019 im 04:27

3 Antworten

Beste Antwort

Sie können Array.slice() mit einem negativen Offset:

const offset = 3;
const cmsData = [1, 2, 3, 4];
const firstItems = cmsData.slice(0, -offset);
const lastItems = cmsData.slice(-offset);

console.log(firstItems);

console.log(lastItems);
2
Ori Drori 18 Jän. 2019 im 01:31

Sie können diese Art von Syntax nur am Ende eines Arrays verwenden - wie Sie sehen, funktioniert sie am Anfang nicht. Verwenden Sie stattdessen .slice:

const cmsData = [0, 1, 2, 3];

const firstItems = cmsData.slice(0, cmsData.length - 1);
const last = cmsData[cmsData.length - 1];
console.log(firstItems);
console.log(last);

Oder um mehrere Elemente vom Ende zu erhalten:

const cmsData = [0, 1, 2, 3];
const offset = 2;

const firstItems = cmsData.slice(0, cmsData.length - offset);
const last = cmsData.slice(cmsData.length - offset);
console.log(firstItems);
console.log(last);
0
CertainPerformance 18 Jän. 2019 im 01:31

Verwenden Sie einfach Array.prototype.slice :

firstItems = cmsData.slice(0, cmsData.length - offset);
last = cmsData.slice(cmsData.length - offset);
0
Nathan 18 Jän. 2019 im 01:31