Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/vue.js/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 删除索引的数组逻辑操作_Javascript_Arrays_Logic - Fatal编程技术网

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个参数

  • ArrayToProcess-将要处理的数组
  • 索引目标-这是由索引定义的选定值
  • 变形值-这是我希望所选值成为的值
  • 我的目标是接受indexTarget,例如

    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));