Javascript 删除索引的数组逻辑操作
我正在尝试创建一个可以操纵数组的函数Javascript 删除索引的数组逻辑操作,javascript,arrays,logic,Javascript,Arrays,Logic,我正在尝试创建一个可以操纵数组的函数 var myArray = [2, 1, 1, 1, 1]; 现在我希望它是这样的 [2, 1, 3]; [3,1,1,1] 现在我的函数接受3个参数 ArrayToProcess-将要处理的数组 索引目标-这是由索引定义的选定值 变形值-这是我希望所选值成为的值 我的目标是接受indexTarget,例如 myFunction(myArray,0,3); //myArray is [2, 1, 1, 1, 1] 如您所见,我希望我的函数在myArr
var myArray = [2, 1, 1, 1, 1];
现在我希望它是这样的
[2, 1, 3];
[3,1,1,1]
现在我的函数接受3个参数
myFunction(myArray,0,3); //myArray is [2, 1, 1, 1, 1]
如您所见,我希望我的函数在myArray
上循环,因此它将尝试在数组中添加数字,直到达到morptovalue
,因此它变成了[3,1,1,1],它清除第一个索引上的2
,并清除第二个索引上的1
以获得3
如果它在morptovalue上添加了太多的值,那么它也将减去数组上的任何数字
另一个例子是这样的我想要数组
var myArray=[2,1,1,1,1]
像这样
[2, 1, 3];
通过这样调用myFunction
myFunction(myArray,2,3);
我怎样才能做到这一点?如果我将在数组的最后一个索引中设置indexTarget,那么我还希望继续在数组的开头再次迭代,结果如下
[2, 1, 3];
var myArray=[2,1,1,1,1]
它将成为
[1, 1, 1, 3]; //when I invoke myFunction(myArray,4,3);
如果你不明白,请发表评论
这就是我迄今为止所尝试的
var myArray=['2','1','1','1','1'];
indexpress(myArray,0,3);
函数IndexPuse(haystack、indexTarget、MorptoValue){
var-toIntHaystack=[];
对于(var i=0;i=MorptoValue){
打破
}
i++;
}而(i
试试看
var myArray=[2,1,1,1,1];
函数myfunction(数组、索引、目标){
var copy=array.slice(0);
var c=0,
i=指数;
while(c
演示:这是我的变体,它应该比拼接变体工作得更快:
function fixIdx(idx, len) {
return idx % len;
}
function fixStartOffset(idx, len) {
return (idx < len) ? 0 : (idx % len);
}
function morhArray(inputArray, startIndex, targetValue) {
var l = inputArray.length;
var sum = 0;
var endIdx = 0;
while ( (sum < targetValue) && (endIdx < l) )
sum += inputArray[fixIdx(startIndex+endIdx++, l)];
if (endIdx == l) return [sum];
var outputArray = [];
for (var i=fixStartOffset(startIndex+endIdx, l); i<startIndex; i++)
outputArray.push(inputArray[i]);
outputArray.push(sum);
for (var i=startIndex+endIdx; i<l; i++)
outputArray.push(inputArray[i]);
return outputArray;
}
函数fixIdx(idx,len){
返回idx%len;
}
功能FIXSTARTOFSET(idx,len){
返回(idx 对于(var i=fixStartOffset(startIndex+endIdx,l);我解决了自己的问题。我希望这能帮助有同样问题的人
var myarrayx=[1,1,3];//5
函数数组(myarray、索引、目标){
//在阵列上累积值以获得目标值
var accu=0;
对于(var i=0;i索引){
//索引不再可用。只需按一下即可
myarray.push(目标);
}
否则{
//在所需索引中插入元素
拼接(索引,0,目标);
}
返回myarray;
}
log('---'+morphArray(myarrayx,0,2));
请展示您的尝试,我们不是来为您做工作的。@Barmar我重新编辑了我的帖子,我把它放在小提琴上,然后这样:myFunction(myArray,0,3);//myArray是[2,1,1,1]
应该是这样吗?myFunction(myArray,0,2);//myArray是[2,1,1,1]`您的小提琴似乎适用于第一个和第三个示例,您只需要修复第二个。@Barmar好吧,当您尝试添加数字时,我仍然有一个问题,并且您超过了morptovalue
所需的总和。有什么线索可以解决吗?第三个参数不是计数。您应该添加元素,直到它达到总数。
var myarrayx = [1,1,3]; //5
function morphArray(myarray, index, target){
//accumulate value on the array to gain target value
var accu = 0;
for(var i = 0; i < myarray.length; i++){
var thisIndex = myarray[i];
for(var j = 0; j < thisIndex; j++){
if(accu != target){
myarray[i]--;
accu++;
}
else{
break;
}
}
}
//remove the zeroes on the array
for(var k = 0; k < myarray.length; k++){
if(myarray[k] == 0){
myarray.splice(k, 1);
}
}
//check if the target index is still available
if((myarray.length - 1) > index){
//index is not available anymore.. just push it
myarray.push(target);
}
else{
//insert the element in the desired index
myarray.splice(index, 0, target);
}
return myarray;
}
console.log('----'+morphArray(myarrayx, 0, 2));