There is an array and a function, you need to delete elements from the array, I understand that delete deletes an element, but after it there is a “hole”, how can I completely delete it?
var myArr = [1, 2, 3, 6, 7, 13, 349, 3483 , 5432];
var doubledOdds = onlyDoubledOdds (myArr);
console.log (doubledOdds.length);
console.log (doubledOdds);
if (doubledOdds === myArr) {
console.log ('WTF ?!');
} else {
console.log ('Ok');
}
function onlyDoubledOdds (sourceArray) {
var result = sourceArray;
for (var i = 0; i & lt; result.length; i ++) {
if (i% 2 == 0) {
delete result [i];
} else {
result [i] * = 2;
}
}
return result;
}
Answer 1, authority 100%
Special methods can be used to remove it, such as
shift
– removes from the beginningpop
– from the endsplice
– from the middle
With the help of splice
, you can just delete elements, insert elements, replace elements – one at a time and at the same time.
The syntax is:
arr.splice (start [ countDelete [ elemInsert1, …, elemInsertN]])
i.e. delete countDelete
elements starting at start
and then insert elemInsert1, ..., elemInsertN
in their place. If countDelete
is not specified, then everything from start
to the end will be cut off. Returns an array of removed elements.
An example with deletion looks like this:
var arr = ["Hello", "you", "Misha"];
arr.splice (1, 1); // starting from position 1, remove 1 element
alert (arr); // left ["Hello", "Misha"]
and substitution:
var arr = ["Hello", "you", "boy", "Misha"];
// remove the first 3 items and add others instead
arr.splice (0, 3, "Zdarof!")
alert (arr) // now ["Zdarof!", "Misha"]
Answer 2, authority 36%
When using the delete
operator, the length
property of the array does not change, so when using the length in a loop, there will be no difference.
The onlyDoubledOdds
function does something incomprehensible, depending on the index of the element, and changes the original array, therefore, when comparing, the returned value is naturally equal to the passed one, and not "WTF"
If you need to filter an array, you can use the filter function ,
if you need to get an array based on an existing one, but with different elements, you can use the map ,
if you want in one pass, you can use the function reduce
For example:
var myArr = [1, 2, 3, 6, 7, 13, 349, 3483 , 5432];
var doubledOddsMapFilter = onlyDoubledOddsMapFilter (myArr);
console.log ('doubledOddsMapFilter.length', doubledOddsMapFilter.length);
console.log ('doubledOddsMapFilter', doubledOddsMapFilter);
if (doubledOddsMapFilter === myArr) {
console.log ('WTF ?!');
} else {
console.log ('Ok');
}
var doubledOddsReduce = onlyDoubledOddsReduce (myArr);
console.log ('doubledOddsReduce.length', doubledOddsReduce.length);
console.log ('doubledOddsReduce', doubledOddsReduce);
if (doubledOddsReduce === myArr) {
console.log ('WTF ?!');
} else {
console.log ('Ok');
}
function onlyDoubledOddsMapFilter (sourceArray) {
return sourceArray.filter ((el, i) = & gt; i% 2! = 0) .map (el = & gt; el * 2);
}
function onlyDoubledOddsReduce (sourceArray) {
return sourceArray.reduce ((acc, el, i) = & gt; {
if (i% 2! = 0) acc.push (el * 2);
return acc;
}, []);
}
Answer 3
var myArr = [1, 2, 3, 6, 7, 13, 349, 3483, 5432];
myArr = myArr.map (el = & gt; el% 2! == 0? el * 2: el);
myArr = myArr.filter (el = & gt; el% 2 === 0? true: false);