freeCodeCamp/guide/chinese/certifications/javascript-algorithms-and-d.../basic-algorithm-scripting/where-do-i-belong/index.md

205 lines
9.2 KiB
Markdown
Raw Normal View History

---
title: Where Do I Belong
localeTitle: 我属于哪里?
---
![:triangular_flag_on_post:](https://forum.freecodecamp.com/images/emoji/emoji_one/triangular_flag_on_post.png?v=3 "triangular_flag_on_post")如果卡住,请记得使用**`Read-Search-Ask`** 。尝试配对程序![:busts_in_silhouette:](https://forum.freecodecamp.com/images/emoji/emoji_one/busts_in_silhouette.png?v=3 "busts_in_silhouette")并编写自己的代码![:pencil:](https://forum.freecodecamp.com/images/emoji/emoji_one/pencil.png?v=3 ":铅笔:")
### ![:checkered_flag:](https://forum.freecodecamp.com/images/emoji/emoji_one/checkered_flag.png?v=3 "checkered_flag")问题说明:
这可能是一个难以理解的问题。您需要在数组中找到按顺序插入数字的位置,并返回应该去的索引。
#### 相关链接
* [JS数组排序](http://forum.freecodecamp.com/t/javascript-array-prototype-sort/14306)
## ![:speech_balloon:](https://forum.freecodecamp.com/images/emoji/emoji_one/speech_balloon.png?v=3 "speech_balloon")提示1
首先要做的是将数组从低到大排序,只是为了使代码更容易。这是排序的地方,它需要一个回调函数,所以你必须创建它。
> _现在尝试解决问题_
## ![:speech_balloon:](https://forum.freecodecamp.com/images/emoji/emoji_one/speech_balloon.png?v=3 "speech_balloon")提示2
对数组进行排序后,只需检查第一个更大的数字并返回索引。
> _现在尝试解决问题_
## ![:speech_balloon:](https://forum.freecodecamp.com/images/emoji/emoji_one/speech_balloon.png?v=3 "speech_balloon")提示3
如果该数字没有索引,那么您也必须处理该案例。
> _现在尝试解决问题_
## 扰流警报!
![警告牌](//discourse-user-assets.s3.amazonaws.com/original/2X/2/2d6c412a50797771301e7ceabd554cef4edcd74d.gif)
**提前解决!**
## ![:beginner:](https://forum.freecodecamp.com/images/emoji/emoji_one/beginner.png?v=3 ":初学者:")基本代码解决方案
```
function getIndexToIns(arr, num) {
arr.sort(function(a, b) {
return a - b;
});
for (var a = 0; a < arr.length; a++) {
if (arr[a] >= num)
return a;
}
return arr.length;
}
```
![:rocket:](https://forum.freecodecamp.com/images/emoji/emoji_one/rocket.png?v=3 ":火箭:") [运行代码](https://repl.it/CLjU/36)
## 代码说明:
* 首先,我使用`.sort(callbackFuntion)`对数组进行排序,从左到右按最低到最高排序。
* 然后我使用for循环来比较从最小的一个开始的数组中的项目。当数组上的项大于我们要比较的数时我们将索引作为整数返回。
#### 相关链接
* [parseInt函数](http://forum.freecodecamp.com/t/javascript-parseint/14686)
## ![:beginner:](https://forum.freecodecamp.com/images/emoji/emoji_one/beginner.png?v=3 ":初学者:")基本代码解决方案
```
function getIndexToIns(arr, num) {
// Find my place in this sorted array.
var times = arr.length; // runs the for loop once for each thing in the array
var count = 0;
for (var i=0;i<times;i++){
if(num>arr[i]){count++;} } // counts how many array numbers are smaller than num
return count; // the above equals num's position in a sorted array
}
getIndexToIns([40, 60], 50);
```
![:rocket:](https://forum.freecodecamp.com/images/emoji/emoji_one/rocket.png?v=3 ":火箭:") [运行代码](https://repl.it/CLjU/2547)
## 代码说明:
* 我没有对arr输入数组进行排序
* 每当num输入大于arr输入数时我都会运行for循环计数。
* 这个数字相当于num在排序数组中的位置。
## ![:beginner:](https://forum.freecodecamp.com/images/emoji/emoji_one/beginner.png?v=3 ":初学者:")基本代码解决方案
[@HarinaPana](/u/harinapana)
```
function getIndexToIns(arr, num) {
arr.sort(function(a, b) {
return a - b;
});
var i = 0;
while (num > arr[i]) {
i++;
}
return i;
}
getIndexToIns([40, 60], 50);
```
![:rocket:](https://forum.freecodecamp.com/images/emoji/emoji_one/rocket.png?v=3 ":火箭:") [运行代码](https://repl.it/CLjU/4135)
## 代码说明:
* 排序现有数组。
* 在检查_num_是否更大时迭代数组。
* 当_num_不大于_i_并且返回最后检查的元素时循环将停止。
## ![:sunflower:](https://forum.freecodecamp.com/images/emoji/emoji_one/sunflower.png?v=3 ":向日葵:")中级代码解决方案:
通过[@faustodc](/u/faustodc)
```
function getIndexToIns(arr, num) {
arr.push(num);
arr.sort(function(a, b){return ab});
return arr.indexOf(num);
}
```
![:rocket:](https://forum.freecodecamp.com/images/emoji/emoji_one/rocket.png?v=3 ":火箭:") [运行代码](https://repl.it/EB10/1)
## 代码说明:
* 首先,我们使用`push()`将数字`num`添加到数组中, `push()`其添加为数组的最后一个元素。
* 然后我们使用`sort()`和回调函数`function(a, b){return ab}`来按升序对数字进行排序。
* 最后,我们使用`indexOf()`函数`indexOf()`数组中`num`的位置或索引。
#### 相关链接
* [推()](http://forum.freecodecamp.com/t/javascript-array-prototype-push/14298)
* [分类()](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/sort)
* [指数()](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/indexOf)
## ![:sunflower:](https://forum.freecodecamp.com/images/emoji/emoji_one/sunflower.png?v=3 ":向日葵:")中级代码解决方案:
**使用`.findIndex()`**
```
function getIndexToIns(arr, num) {
// sort and find right index
var index = arr.sort((curr, next) => curr > next)
.findIndex((currNum)=> num <= currNum);
// Returns proper answer
return index === -1 ? arr.length : index;
}
getIndexToIns([40, 60], 500);
```
![:rocket:](https://forum.freecodecamp.com/images/emoji/emoji_one/rocket.png?v=3 ":火箭:") [运行代码](https://repl.it/CLjU/63)
## 代码说明:
* 首先按升序对数组进行排序,目前使用数组函数完成此操作以实现最小占用空间。
* 一旦数组被排序,我们直接应用`.findIndex()` ,我们将比较数组中的每个元素,直到我们找到`num <= currNum`这意味着我们要插入的数字小于或等于当前数字迭代中的数字。
* 然后我们使用三元运算来检查我们是否返回了索引或`-1` 。我们只有在找不到索引时才得到`-1` 这意味着当我们为数组中的所有元素得到一个false时对于这种情况这意味着`num`应该插入到列表的末尾,这样我们为什么要使用`arr.length` 。
#### 相关链接
* [Array.findIndex](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/findIndex)
* [箭头功能](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Functions/Arrow_functions)
* [三元运算符](http://forum.freecodecamp.com/t/javascript-ternary-operator/15973)
## ![:rotating_light:](https://forum.freecodecamp.com/images/emoji/emoji_one/rotating_light.png?v=3 "rotating_light")高级代码解决方案
通过[@nivrith](/u/nivrith)
```
function getIndexToIns(arr, num) {
return arr.concat(num).sort((a,b) => ab).indexOf(num);
}
getIndexToIns([1,3,4],2);
```
![:rocket:](https://forum.freecodecamp.com/images/emoji/emoji_one/rocket.png?v=3 ":火箭:") [运行代码](https://repl.it/IUJE/0)
## 代码说明:
* 我们使用方法链来一个接一个地调用一个方法来解决单行中的问题。首先我们通过调用arr.concatnum方法合并`arr`和`num`
* 然后我们使用带有回调**箭头函数的** `sort()` `(a, b) => return ab`来按升序对数字进行排序
* 最后,我们使用`indexOf()`方法`indexOf()`数组中`num`的位置或索引
#### 相关链接
* [用JavaScript链接的方法](https://schier.co/blog/2013/11/14/method-chaining-in-javascript.html)
* [CONCAT](https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/Array/concat?v=example)
* [箭头功能](https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Functions/Arrow_functions)
## ![:clipboard:](https://forum.freecodecamp.com/images/emoji/emoji_one/clipboard.png?v=3 ":剪贴板:")捐款说明:
* ![:warning:](https://forum.freecodecamp.com/images/emoji/emoji_one/warning.png?v=3 ":警告:") **请勿**添加与任何现有解决方案类似的解决方案。如果您认为它**_相似但更好_** ,那么尝试合并(或替换)现有的类似解决方案。
* 添加解决方案的说明。
* 将解决方案分为以下类别之一 - **基本** **中级**和**高级** 。 ![:traffic_light:](https://forum.freecodecamp.com/images/emoji/emoji_one/traffic_light.png?v=3 ":红绿灯:")
* 如果您添加了任何**相关的主要内容,**请仅添加您的用户名。 ![:warning:](https://forum.freecodecamp.com/images/emoji/emoji_one/warning.png?v=3 ":警告:") **_不要_** _删除任何现有的用户名_
> 看到![:point_right:](https://forum.freecodecamp.com/images/emoji/emoji_one/point_right.png?v=3 "point_right") [**`Wiki Challenge Solution Template`**](http://forum.freecodecamp.com/t/algorithm-article-template/14272)供参考。