制作一个将数字放在数组中间的函数

时间:2019-04-16 03:40:33

标签: javascript arrays function

我对JavaScript真的很陌生,我一直在为尝试进入编码训练营而进行的这段代码苦苦挣扎。我想知道是否有人可以提供帮助?

function putInTheMiddle(array, item) {
  for (i = 0; i < 20; i++) {
    let Middle = Floor.Math(array / 2);
    array.slice(Middle, 0, item);
  }

  console.log putInTheMiddle([1, 3], 2);
  console.log putInTheMiddle([1, 2, 4, 5], 3);
}

我希望它分别以[1, 2, 3][1, 2, 3, 4, 5]的形式打印数组。

5 个答案:

答案 0 :(得分:1)

您不需要循环,该循环将插入20次。

获取值下限的函数是Math.floor(),而不是Floor.Math()

您需要将数组的长度除以2,而不是数组本身。

该函数在适当的位置修改数组,但是如果您希望在调用该函数时能够调用console.log(),那么它也需要返回该数组。

您需要使用splice()方法插入数组。 slice()仅提取数组的一部分而不进行修改。

您需要在console.log()的参数周围加上括号,这必须在函数定义之外。

function putInTheMiddle(array, item) {
  let Middle = Math.floor(array.length / 2)
  array.splice(Middle, 0, item);
  return array;
}

console.log(putInTheMiddle([1, 3], 2));
console.log(putInTheMiddle([1, 2, 4, 5], 3));

答案 1 :(得分:1)

尝试使用Math.floor而不是Floor.Math

const putInTheMiddle = (array, item) => {
  let middleOfArray = Math.floor(array.length / 2);
  array.splice(middleOfArray, 0, item);
  return array;
}

console.log(putInTheMiddle([1, 3], 2));
console.log(putInTheMiddle([1, 2, 4, 5], 3));

答案 2 :(得分:1)

Math.floorarray.length一起使用-而且,console.log是一个函数,因此请用括号()来调用它:

function putInTheMiddle(array, item) {
  array.splice(Math.floor(array.length / 2), 0, item);
  return array;
}

console.log(putInTheMiddle([1, 3], 2));
console.log(putInTheMiddle([1, 2, 4, 5], 3));
.as-console-wrapper { max-height: 100% !important; top: auto; }

答案 3 :(得分:0)

OP发布的内容需要一些更正,以下代码反映了这些情况:

function putInTheMiddle(arr, item) {
  let m = Math.floor((arr.length / 2));
  arr.splice(m, 0, item);
  return arr;
}

let arr = putInTheMiddle([1, 3], 2);
console.log(`[` + arr.join() + `]`);

let arr2 = putInTheMiddle([1, 2, 4, 5], 3);
console.log(`[` + arr2.join() + `]`);

如果console.log要显示预期的结果,则用户定义的函数在每种情况下都需要返回更改后的数组。请注意,数学是一个对象,floor是一个方法,就像控制台是一个对象,log是一个方法一样。该方法需要括号。

为了确定数组的中间索引,您需要找到它的长度,该长度很容易获得,因为它是数组的属性。将长度除以2后,您需要将结果四舍五入为小于或等于其值的最接近的整数,Math.floor()将有助于实现这一目标。

该代码没有使用slice方法,而是使用Array对象的splice方法,该方法非常适合当前的任务。

我同意@Barmar的观点,OP不需要for循环。

最后,我使用Array对象的join()方法将元素连接到字符串中以便于显示,这不会永久影响数组。

答案 4 :(得分:0)

由于您是Java语言的新手,所以我想用简单的方法来回答这个问题。

//array is the array in which you want to insert.
//item is the value which you want to insert.
function putInMiddle(array, item){
 let index = Math.floor(array.length/2);
  //array.splice is a method which takes 3 arguments.
  //argument 1 is the index where you want to make change.
  //argument 2 is number of elements you want to remove starting from that index.
  //argument 3 is the element that you want to insert at that index.
  //In your case no element needs to be removed, hence argument 2 is 0.
 array.splice(index,0,item);
 return array; 
}

//Then you can call the function in console.log if you just want to print the value.
console.log(putInMiddle(['1','2','4','5'],'3'));
//This will print ['1','2','3','4','5']

如果您只想添加1个元素,则上面的代码可以完美地工作。但是,如果您想一次添加多个元素,该怎么办。放松一下,我已经让你对此感到满意。使用以下内容:

function putInMiddle(array, itemArr){
 let index  = Math.floor(array.length/2);
 let numItems = itemArr.length;
 for(let i=0; i<numItems; i++){
   array.splice(index,0,itemArr[i]);
   index++;
 }
 return array;
}

console.log(putInMiddle(['1','2','6','7'],['3','4','5']));
//This will print ['1','2','3','4','5','6','7']

希望这会有所帮助!