An ES6 array of numbers - Double last number, delete the first numberFinding the longest non-decreasing subsequence in a gridHello, First Name Last NameMove array element to the first positionPig Dice Game: Luck game to get to 100 pointsMapping one array onto another where columns from first array become rows in second arrayShuffling an array keeping some elements fixedJavaScript Armstrong Number Validator (ES6)Simple function returning 1 if the Mean = Mode, or 0 if notAdd one to the last array element
Are there any “Third Order” acronyms used in space exploration?
Why don't Wizards use wrist straps to protect against disarming charms?
Has Dumbledore ever scolded Harry?
Other than good shoes and a stick, what are some ways to preserve your knees on long hikes?
Why is it called a stateful and a stateless firewall?
What is this gigantic dish at Ben Gurion airport?
A command to output each line forward then backwards
How can I prevent my AC condensate pipe from making my soil soggy?
How to publish superseding results without creating enemies
What's the benefit of prohibiting the use of techniques/language constructs that have not been taught?
Why don't airports use arresting gears to recover energy from landing passenger planes?
Are Latin participles from third-person plural present active indicative forms?
Are space camera sensors usually round, or square?
Is there any reason to concentrate on the Thunderous Smite spell after using its effects?
Is there a tool to measure the "maturity" of a code in Git?
Output a Super Mario Image
How to make classical firearms effective on space habitats despite the coriolis effect?
Why is belonging not transitive?
Expectation value of operators with non-zero Hamiltonian commutators
Does a feasible high thrust high specific impulse engine exist using current non space technology?
Ambiguity in notation resolved by +
What 68-pin connector is this on my 2.5" solid state drive?
Python web-scraper to download table of transistor counts from Wikipedia
What does this line from The hobbit mean?
An ES6 array of numbers - Double last number, delete the first number
Finding the longest non-decreasing subsequence in a gridHello, First Name Last NameMove array element to the first positionPig Dice Game: Luck game to get to 100 pointsMapping one array onto another where columns from first array become rows in second arrayShuffling an array keeping some elements fixedJavaScript Armstrong Number Validator (ES6)Simple function returning 1 if the Mean = Mode, or 0 if notAdd one to the last array element
.everyoneloves__top-leaderboard:empty,.everyoneloves__mid-leaderboard:empty,.everyoneloves__bot-mid-leaderboard:empty margin-bottom:0;
$begingroup$
I'm writing a JavaScript function for an array, based on a geographic sequence. $[1, 2, 4, 8, 16]$, etc.
This function needs to populate the next number in the sequence
$$item_n = item_n-1 * 2$$
If there are more than $10$ items in the array, remove the first
(smallest) number.
If the array reaches $2^15$ (no idea what this is), reset the array to
its original contents - $[1, 2, 4, 8, 16]$.
I have it working, but I feel this could be written more efficiently...
updateSequence()
var sequence = this.get("geometricSequence");
// Modify the sequence here
function* values(sequence)
for (let prop of Object.keys(sequence))
yield sequence[prop];
let arr = Array.from(values(sequence));
const lastIndex = arr.length - 1;
const lastValue = parseInt(arr[lastIndex]) * 2;
arr.push(lastValue);
if (lastIndex > 9)
arr.slice(0, 1);
if (lastValue > 32768)
arr = [1, 2, 4, 8, 16];
this.set('geometricSequence', arr);
javascript array ecmascript-6
New contributor
$endgroup$
add a comment
|
$begingroup$
I'm writing a JavaScript function for an array, based on a geographic sequence. $[1, 2, 4, 8, 16]$, etc.
This function needs to populate the next number in the sequence
$$item_n = item_n-1 * 2$$
If there are more than $10$ items in the array, remove the first
(smallest) number.
If the array reaches $2^15$ (no idea what this is), reset the array to
its original contents - $[1, 2, 4, 8, 16]$.
I have it working, but I feel this could be written more efficiently...
updateSequence()
var sequence = this.get("geometricSequence");
// Modify the sequence here
function* values(sequence)
for (let prop of Object.keys(sequence))
yield sequence[prop];
let arr = Array.from(values(sequence));
const lastIndex = arr.length - 1;
const lastValue = parseInt(arr[lastIndex]) * 2;
arr.push(lastValue);
if (lastIndex > 9)
arr.slice(0, 1);
if (lastValue > 32768)
arr = [1, 2, 4, 8, 16];
this.set('geometricSequence', arr);
javascript array ecmascript-6
New contributor
$endgroup$
$begingroup$
Could you include the code for this.get("geometricSequence") and an example how this data looks?
$endgroup$
– dfhwze
10 hours ago
add a comment
|
$begingroup$
I'm writing a JavaScript function for an array, based on a geographic sequence. $[1, 2, 4, 8, 16]$, etc.
This function needs to populate the next number in the sequence
$$item_n = item_n-1 * 2$$
If there are more than $10$ items in the array, remove the first
(smallest) number.
If the array reaches $2^15$ (no idea what this is), reset the array to
its original contents - $[1, 2, 4, 8, 16]$.
I have it working, but I feel this could be written more efficiently...
updateSequence()
var sequence = this.get("geometricSequence");
// Modify the sequence here
function* values(sequence)
for (let prop of Object.keys(sequence))
yield sequence[prop];
let arr = Array.from(values(sequence));
const lastIndex = arr.length - 1;
const lastValue = parseInt(arr[lastIndex]) * 2;
arr.push(lastValue);
if (lastIndex > 9)
arr.slice(0, 1);
if (lastValue > 32768)
arr = [1, 2, 4, 8, 16];
this.set('geometricSequence', arr);
javascript array ecmascript-6
New contributor
$endgroup$
I'm writing a JavaScript function for an array, based on a geographic sequence. $[1, 2, 4, 8, 16]$, etc.
This function needs to populate the next number in the sequence
$$item_n = item_n-1 * 2$$
If there are more than $10$ items in the array, remove the first
(smallest) number.
If the array reaches $2^15$ (no idea what this is), reset the array to
its original contents - $[1, 2, 4, 8, 16]$.
I have it working, but I feel this could be written more efficiently...
updateSequence()
var sequence = this.get("geometricSequence");
// Modify the sequence here
function* values(sequence)
for (let prop of Object.keys(sequence))
yield sequence[prop];
let arr = Array.from(values(sequence));
const lastIndex = arr.length - 1;
const lastValue = parseInt(arr[lastIndex]) * 2;
arr.push(lastValue);
if (lastIndex > 9)
arr.slice(0, 1);
if (lastValue > 32768)
arr = [1, 2, 4, 8, 16];
this.set('geometricSequence', arr);
javascript array ecmascript-6
javascript array ecmascript-6
New contributor
New contributor
edited 1 hour ago
Jamal♦
31.9k12 gold badges123 silver badges230 bronze badges
31.9k12 gold badges123 silver badges230 bronze badges
New contributor
asked 10 hours ago
JimJim
211 bronze badge
211 bronze badge
New contributor
New contributor
$begingroup$
Could you include the code for this.get("geometricSequence") and an example how this data looks?
$endgroup$
– dfhwze
10 hours ago
add a comment
|
$begingroup$
Could you include the code for this.get("geometricSequence") and an example how this data looks?
$endgroup$
– dfhwze
10 hours ago
$begingroup$
Could you include the code for this.get("geometricSequence") and an example how this data looks?
$endgroup$
– dfhwze
10 hours ago
$begingroup$
Could you include the code for this.get("geometricSequence") and an example how this data looks?
$endgroup$
– dfhwze
10 hours ago
add a comment
|
2 Answers
2
active
oldest
votes
$begingroup$
This will be cleaner if you implement it as a pure function, which takes the sequence as an argument. You can make [1, 2, 4, 8, 16]
a default value for that argument, so that you can start the sequence with nothing. Taking this approach, the function simplifies to:
function updateSequence(arr = updateSequence.default)
const last = arr[arr.length-1]
if (last == 32768) return updateSequence.default
const ret = arr.concat(last * 2)
return ret.length > 10 ? ret.slice(1) : ret
updateSequence.default = [1, 2, 4, 8, 16]
You can test that it works like this:
// test it
var arr = updateSequence()
for (i=0; i<15; i++)
console.log(arr)
arr = updateSequence(arr)
which prints the following:
[ 1, 2, 4, 8, 16, 32 ]
[ 1, 2, 4, 8, 16, 32, 64 ]
[ 1, 2, 4, 8, 16, 32, 64, 128 ]
[ 1, 2, 4, 8, 16, 32, 64, 128, 256 ]
[ 1, 2, 4, 8, 16, 32, 64, 128, 256, 512 ]
[ 2, 4, 8, 16, 32, 64, 128, 256, 512, 1024 ]
[ 4, 8, 16, 32, 64, 128, 256, 512, 1024, 2048 ]
[ 8, 16, 32, 64, 128, 256, 512, 1024, 2048, 4096 ]
[ 16, 32, 64, 128, 256, 512, 1024, 2048, 4096, 8192 ]
[ 32, 64, 128, 256, 512, 1024, 2048, 4096, 8192, 16384 ]
[ 64, 128, 256, 512, 1024, 2048, 4096, 8192, 16384, 32768 ]
[ 1, 2, 4, 8, 16 ]
[ 1, 2, 4, 8, 16, 32 ]
[ 1, 2, 4, 8, 16, 32, 64 ]
[ 1, 2, 4, 8, 16, 32, 64, 128 ]
$endgroup$
add a comment
|
$begingroup$
Since obj.get("geometricSequence");
presumably already contains an array, you can skip the whole shenanigans with the iterator and directly work on that. Also, if you change the order of the if
statements at the end you can save some work by not doing slices on an array you eventually gonna replace later anyway. So:
updateSequence()
let arr = this.get("geometricSequence");
const lastIndex = arr.length - 1;
const lastValue = parseInt(arr[lastIndex]) * 2;
arr.push(lastValue);
if (lastValue > 32768)
arr = [1, 2, 4, 8, 16];
else if (lastIndex > 9)
arr.slice(0, 1);
this.set('geometricSequence', arr);
New contributor
$endgroup$
add a comment
|
Your Answer
StackExchange.ifUsing("editor", function ()
StackExchange.using("externalEditor", function ()
StackExchange.using("snippets", function ()
StackExchange.snippets.init();
);
);
, "code-snippets");
StackExchange.ready(function()
var channelOptions =
tags: "".split(" "),
id: "196"
;
initTagRenderer("".split(" "), "".split(" "), channelOptions);
StackExchange.using("externalEditor", function()
// Have to fire editor after snippets, if snippets enabled
if (StackExchange.settings.snippets.snippetsEnabled)
StackExchange.using("snippets", function()
createEditor();
);
else
createEditor();
);
function createEditor()
StackExchange.prepareEditor(
heartbeatType: 'answer',
autoActivateHeartbeat: false,
convertImagesToLinks: false,
noModals: true,
showLowRepImageUploadWarning: true,
reputationToPostImages: null,
bindNavPrevention: true,
postfix: "",
imageUploader:
brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/4.0/"u003ecc by-sa 4.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
allowUrls: true
,
onDemand: true,
discardSelector: ".discard-answer"
,immediatelyShowMarkdownHelp:true
);
);
Jim is a new contributor. Be nice, and check out our Code of Conduct.
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function ()
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fcodereview.stackexchange.com%2fquestions%2f229037%2fan-es6-array-of-numbers-double-last-number-delete-the-first-number%23new-answer', 'question_page');
);
Post as a guest
Required, but never shown
2 Answers
2
active
oldest
votes
2 Answers
2
active
oldest
votes
active
oldest
votes
active
oldest
votes
$begingroup$
This will be cleaner if you implement it as a pure function, which takes the sequence as an argument. You can make [1, 2, 4, 8, 16]
a default value for that argument, so that you can start the sequence with nothing. Taking this approach, the function simplifies to:
function updateSequence(arr = updateSequence.default)
const last = arr[arr.length-1]
if (last == 32768) return updateSequence.default
const ret = arr.concat(last * 2)
return ret.length > 10 ? ret.slice(1) : ret
updateSequence.default = [1, 2, 4, 8, 16]
You can test that it works like this:
// test it
var arr = updateSequence()
for (i=0; i<15; i++)
console.log(arr)
arr = updateSequence(arr)
which prints the following:
[ 1, 2, 4, 8, 16, 32 ]
[ 1, 2, 4, 8, 16, 32, 64 ]
[ 1, 2, 4, 8, 16, 32, 64, 128 ]
[ 1, 2, 4, 8, 16, 32, 64, 128, 256 ]
[ 1, 2, 4, 8, 16, 32, 64, 128, 256, 512 ]
[ 2, 4, 8, 16, 32, 64, 128, 256, 512, 1024 ]
[ 4, 8, 16, 32, 64, 128, 256, 512, 1024, 2048 ]
[ 8, 16, 32, 64, 128, 256, 512, 1024, 2048, 4096 ]
[ 16, 32, 64, 128, 256, 512, 1024, 2048, 4096, 8192 ]
[ 32, 64, 128, 256, 512, 1024, 2048, 4096, 8192, 16384 ]
[ 64, 128, 256, 512, 1024, 2048, 4096, 8192, 16384, 32768 ]
[ 1, 2, 4, 8, 16 ]
[ 1, 2, 4, 8, 16, 32 ]
[ 1, 2, 4, 8, 16, 32, 64 ]
[ 1, 2, 4, 8, 16, 32, 64, 128 ]
$endgroup$
add a comment
|
$begingroup$
This will be cleaner if you implement it as a pure function, which takes the sequence as an argument. You can make [1, 2, 4, 8, 16]
a default value for that argument, so that you can start the sequence with nothing. Taking this approach, the function simplifies to:
function updateSequence(arr = updateSequence.default)
const last = arr[arr.length-1]
if (last == 32768) return updateSequence.default
const ret = arr.concat(last * 2)
return ret.length > 10 ? ret.slice(1) : ret
updateSequence.default = [1, 2, 4, 8, 16]
You can test that it works like this:
// test it
var arr = updateSequence()
for (i=0; i<15; i++)
console.log(arr)
arr = updateSequence(arr)
which prints the following:
[ 1, 2, 4, 8, 16, 32 ]
[ 1, 2, 4, 8, 16, 32, 64 ]
[ 1, 2, 4, 8, 16, 32, 64, 128 ]
[ 1, 2, 4, 8, 16, 32, 64, 128, 256 ]
[ 1, 2, 4, 8, 16, 32, 64, 128, 256, 512 ]
[ 2, 4, 8, 16, 32, 64, 128, 256, 512, 1024 ]
[ 4, 8, 16, 32, 64, 128, 256, 512, 1024, 2048 ]
[ 8, 16, 32, 64, 128, 256, 512, 1024, 2048, 4096 ]
[ 16, 32, 64, 128, 256, 512, 1024, 2048, 4096, 8192 ]
[ 32, 64, 128, 256, 512, 1024, 2048, 4096, 8192, 16384 ]
[ 64, 128, 256, 512, 1024, 2048, 4096, 8192, 16384, 32768 ]
[ 1, 2, 4, 8, 16 ]
[ 1, 2, 4, 8, 16, 32 ]
[ 1, 2, 4, 8, 16, 32, 64 ]
[ 1, 2, 4, 8, 16, 32, 64, 128 ]
$endgroup$
add a comment
|
$begingroup$
This will be cleaner if you implement it as a pure function, which takes the sequence as an argument. You can make [1, 2, 4, 8, 16]
a default value for that argument, so that you can start the sequence with nothing. Taking this approach, the function simplifies to:
function updateSequence(arr = updateSequence.default)
const last = arr[arr.length-1]
if (last == 32768) return updateSequence.default
const ret = arr.concat(last * 2)
return ret.length > 10 ? ret.slice(1) : ret
updateSequence.default = [1, 2, 4, 8, 16]
You can test that it works like this:
// test it
var arr = updateSequence()
for (i=0; i<15; i++)
console.log(arr)
arr = updateSequence(arr)
which prints the following:
[ 1, 2, 4, 8, 16, 32 ]
[ 1, 2, 4, 8, 16, 32, 64 ]
[ 1, 2, 4, 8, 16, 32, 64, 128 ]
[ 1, 2, 4, 8, 16, 32, 64, 128, 256 ]
[ 1, 2, 4, 8, 16, 32, 64, 128, 256, 512 ]
[ 2, 4, 8, 16, 32, 64, 128, 256, 512, 1024 ]
[ 4, 8, 16, 32, 64, 128, 256, 512, 1024, 2048 ]
[ 8, 16, 32, 64, 128, 256, 512, 1024, 2048, 4096 ]
[ 16, 32, 64, 128, 256, 512, 1024, 2048, 4096, 8192 ]
[ 32, 64, 128, 256, 512, 1024, 2048, 4096, 8192, 16384 ]
[ 64, 128, 256, 512, 1024, 2048, 4096, 8192, 16384, 32768 ]
[ 1, 2, 4, 8, 16 ]
[ 1, 2, 4, 8, 16, 32 ]
[ 1, 2, 4, 8, 16, 32, 64 ]
[ 1, 2, 4, 8, 16, 32, 64, 128 ]
$endgroup$
This will be cleaner if you implement it as a pure function, which takes the sequence as an argument. You can make [1, 2, 4, 8, 16]
a default value for that argument, so that you can start the sequence with nothing. Taking this approach, the function simplifies to:
function updateSequence(arr = updateSequence.default)
const last = arr[arr.length-1]
if (last == 32768) return updateSequence.default
const ret = arr.concat(last * 2)
return ret.length > 10 ? ret.slice(1) : ret
updateSequence.default = [1, 2, 4, 8, 16]
You can test that it works like this:
// test it
var arr = updateSequence()
for (i=0; i<15; i++)
console.log(arr)
arr = updateSequence(arr)
which prints the following:
[ 1, 2, 4, 8, 16, 32 ]
[ 1, 2, 4, 8, 16, 32, 64 ]
[ 1, 2, 4, 8, 16, 32, 64, 128 ]
[ 1, 2, 4, 8, 16, 32, 64, 128, 256 ]
[ 1, 2, 4, 8, 16, 32, 64, 128, 256, 512 ]
[ 2, 4, 8, 16, 32, 64, 128, 256, 512, 1024 ]
[ 4, 8, 16, 32, 64, 128, 256, 512, 1024, 2048 ]
[ 8, 16, 32, 64, 128, 256, 512, 1024, 2048, 4096 ]
[ 16, 32, 64, 128, 256, 512, 1024, 2048, 4096, 8192 ]
[ 32, 64, 128, 256, 512, 1024, 2048, 4096, 8192, 16384 ]
[ 64, 128, 256, 512, 1024, 2048, 4096, 8192, 16384, 32768 ]
[ 1, 2, 4, 8, 16 ]
[ 1, 2, 4, 8, 16, 32 ]
[ 1, 2, 4, 8, 16, 32, 64 ]
[ 1, 2, 4, 8, 16, 32, 64, 128 ]
answered 4 hours ago
JonahJonah
3,7517 silver badges19 bronze badges
3,7517 silver badges19 bronze badges
add a comment
|
add a comment
|
$begingroup$
Since obj.get("geometricSequence");
presumably already contains an array, you can skip the whole shenanigans with the iterator and directly work on that. Also, if you change the order of the if
statements at the end you can save some work by not doing slices on an array you eventually gonna replace later anyway. So:
updateSequence()
let arr = this.get("geometricSequence");
const lastIndex = arr.length - 1;
const lastValue = parseInt(arr[lastIndex]) * 2;
arr.push(lastValue);
if (lastValue > 32768)
arr = [1, 2, 4, 8, 16];
else if (lastIndex > 9)
arr.slice(0, 1);
this.set('geometricSequence', arr);
New contributor
$endgroup$
add a comment
|
$begingroup$
Since obj.get("geometricSequence");
presumably already contains an array, you can skip the whole shenanigans with the iterator and directly work on that. Also, if you change the order of the if
statements at the end you can save some work by not doing slices on an array you eventually gonna replace later anyway. So:
updateSequence()
let arr = this.get("geometricSequence");
const lastIndex = arr.length - 1;
const lastValue = parseInt(arr[lastIndex]) * 2;
arr.push(lastValue);
if (lastValue > 32768)
arr = [1, 2, 4, 8, 16];
else if (lastIndex > 9)
arr.slice(0, 1);
this.set('geometricSequence', arr);
New contributor
$endgroup$
add a comment
|
$begingroup$
Since obj.get("geometricSequence");
presumably already contains an array, you can skip the whole shenanigans with the iterator and directly work on that. Also, if you change the order of the if
statements at the end you can save some work by not doing slices on an array you eventually gonna replace later anyway. So:
updateSequence()
let arr = this.get("geometricSequence");
const lastIndex = arr.length - 1;
const lastValue = parseInt(arr[lastIndex]) * 2;
arr.push(lastValue);
if (lastValue > 32768)
arr = [1, 2, 4, 8, 16];
else if (lastIndex > 9)
arr.slice(0, 1);
this.set('geometricSequence', arr);
New contributor
$endgroup$
Since obj.get("geometricSequence");
presumably already contains an array, you can skip the whole shenanigans with the iterator and directly work on that. Also, if you change the order of the if
statements at the end you can save some work by not doing slices on an array you eventually gonna replace later anyway. So:
updateSequence()
let arr = this.get("geometricSequence");
const lastIndex = arr.length - 1;
const lastValue = parseInt(arr[lastIndex]) * 2;
arr.push(lastValue);
if (lastValue > 32768)
arr = [1, 2, 4, 8, 16];
else if (lastIndex > 9)
arr.slice(0, 1);
this.set('geometricSequence', arr);
New contributor
New contributor
answered 8 hours ago
HolliHolli
1313 bronze badges
1313 bronze badges
New contributor
New contributor
add a comment
|
add a comment
|
Jim is a new contributor. Be nice, and check out our Code of Conduct.
Jim is a new contributor. Be nice, and check out our Code of Conduct.
Jim is a new contributor. Be nice, and check out our Code of Conduct.
Jim is a new contributor. Be nice, and check out our Code of Conduct.
Thanks for contributing an answer to Code Review Stack Exchange!
- Please be sure to answer the question. Provide details and share your research!
But avoid …
- Asking for help, clarification, or responding to other answers.
- Making statements based on opinion; back them up with references or personal experience.
Use MathJax to format equations. MathJax reference.
To learn more, see our tips on writing great answers.
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function ()
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fcodereview.stackexchange.com%2fquestions%2f229037%2fan-es6-array-of-numbers-double-last-number-delete-the-first-number%23new-answer', 'question_page');
);
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
$begingroup$
Could you include the code for this.get("geometricSequence") and an example how this data looks?
$endgroup$
– dfhwze
10 hours ago