㈠ 【前端面试题】考查数组对象方法和字符串对象方法
1. 翻转字符串 :定义一个翻转字符串的函数reverseString(). 要求:把字符串转化成数组,再借助数组的reverse方法翻转数组顺序,最后把数组转化成字符串.你的结果必须得是一个字符串.例: reverseString("Heya") //ayeH
2. 计算阶乘 :定义一个阶乘函数factorialize(num).要求:能够计算其阶乘.
3. 判断回文 :如果给定的字符串是回文,返回true,反之,返回false。注:如果一个字符串忽略标点符号、大小写和空格,正着读和反着读一升尘册模一样,那么这个字符串就是回文。
4. 找到最长的单词 :找到提供的句子中的最长的单词,然后返回该单词的长度(函数的返回值应该是一个数值)
5. 首字母大写 : 确保字符串的每个单词首字母都大写,其余部分小写。像'the'和'of'这样的连接符同理。
6. 拔尖 :在已知包含了4个小数组的大数组中,分别找到每个小数组中的最大值,然后把它们串联起来,形成一个新数组。
7. 重复字符串 :重复一个指定的字符串 num 次. 例如: repeat("*", 3) 应该返回 "***" .
8. 截断字符串 :如果字符串的长度比指定的参数 num 长,则把多余的部分用 ... 来表示。切记,插入到字符串尾部的三个点号也会计入字符串的长度。但是,如果指定的参数 num 小于或等于3,则添加的三个点号不会计入字符串的长度。
9. 切割数组 :把一个数组arr按照指定的数组大小size分割成若干个数组块。例如: chunk([1,2,3,4],2)=[[1,2],[3,4]] ; chunk([1,2,3,4,5],2)=[[1,2],[3,4],[5]] ;
10. 截断数组 : 返回一个数组被截断n个元素后兄首还剩余的元素,截断从索引0开始。
11 找儿子 :如果数吵宏组第一个字符串元素包含了第二个字符串元素的所有字符,函数返回true。例: ["hello", "Hello"] 应该返回 true ,因为在忽略大小写的情况下,第二个字符串的所有字符都可以在第一个字符串找到. ["hello", "hey"] 应该返回 false ,因为字符串"hello"并不包含字符"y"。 ["Alien", "line"] 应该返回 true ,因为"line"中所有字符都可以在"Alien"找到。
12. 删除假值 :删除数组中的所有假值. 在JavaScript中,假值有 false 、 null 、 0 、 "" 、 undefined 和 NaN 。
13. 检查字符串结尾 :检查一个字符串 (str) 是否以指定的字符串 (target) 结尾.如果是,返回true;如果不是,返回false。
14. 摧毁函数 :实现一个摧毁(destroyer)函数,第一个参数是待摧毁的数组,其余的参数是待摧毁的值。
15. 插入数字并找位置 :先给数组排序,然后找到指定的值在数组的位置,最后返回位置对应的索引。
举例: where([1,2,3,4], 1.5) 应该返回 1 。因为 1.5 插入到数组 [1,2,3,4] 后变成 [1,1.5,2,3,4] ,而 1.5 对应的索引值就是 1 。
同理, where([20,3,5], 19) 应该返回 2 。因为 19 插入到数组 [3,5,20] 后变成 [3,5,19,20] ,而 19 对应的索引值就是 2 。
16. 凯撒密码 :下面我们来介绍风靡全球的凯撒密码Caesar ciphe,又叫移位密码。移位密码也就是密码中的字母会按照指定的数量来做移位。一个常见的案例就是ROT13密码,字母会移位13个位置。由'A' ↔ 'N', 'B' ↔ 'O',以此类推。要求:写一个ROT13函数,实现输入加密字符串,输出解密字符串。所有的字母都是大写,不要转化任何非字母形式的字符(例如:空格,标点符号),遇到这些特殊字符,跳过它们。
㈡ 前端如何给数组元素按降序排序
众所周知, sort 方法默认是为字符串排序的,
结果为
如果想要降序该怎么做呢,这时候你要用到字符串的 localeCompare 方法
结果为
不知道你是否会在 b.localeCompare(a)) 还是 a.localeCompare(b)) 上纠结,所幸,可供的选择不多,死记硬背完全可行,比如
对于数字也是这样的
对于 sort 方法
看一个冒泡排序的实现
sort 方法只是将 arr[i] > arr[i + 1] 还是 arr[i] < arr[i + 1] 的决定权交给了我们
至于 sort 方法的实现就更加有趣的,并不是简单的快排,会根据数组的长度、递归的深度等选择不同方式,记得之前写过一篇关于快排的文章 https://www.jianshu.com/p/7186c0b2d23f ,相比之下就要简陋的多了。
㈢ spring MVC 怎么获取前端传递的数组参数
ServletRequestUtils 点一下里面顷大就有获取参数的 你返乎缺根漏辩据类型选择接收数组的就ok了
㈣ 前端数组问题,望解答
因为你在比较a==c的时候,a是数组,c是字符串,所以要进行隐式转换,字符串不可能变成数组,但是任何数据类型都有toString方法,也就是都可以变成字符串兆键,所空蚂以js引擎默认把a转换成字符串(其实就是调用a.toString()),得到"1,2,3",这个字符串和c当然是一样的。注意,==操作符在两端的运算数都是字符串的时候,比较的是每个字符都一样,而不是两个字符串是否在同一地址,这和对象比较斗猜埋不一样。这也是为什么a和b看上去两个一样的数组,==运算的结果却是false,它们不是同一个数组。
建议你继续深入学习一下js中关于==运算符的定义,==和===可能是js中比较迷惑人的地方
㈤ 怎么把前端传到后端的数组拆分出来
把前端传到后端的数组拆分出来的具体步骤。
1、前端将对象数组转换成字符串后传递到后端。
2、后端用字符串接收,注意名称要与前端ajax的对象数组字符串参数名一致,否则接收不到。
3、最终转换成List
㈥ 【前端面试:手写js系列】flat---数组扁平化
数组扁平化定义:在前端项目开发过程中,偶尔会出现层叠数据结构的数组,需要把多层数组转换为一级数组(即提取嵌套数组元素最终合并为一个数组),使其内容合并并且展开。
遍历数组的方案:
for循环
for...of
for...in
forEach()
entries()
keys()
values()
rece()
map()
判断元素是否是数组的方案:
instanceof
constructor
object.prototype.toString.call
isArray
将数组元素进行展开一层的方案:
扩展运算法 + concat(concat() 方法用于合并两个或多个数组,在拼接的过程中加上扩展运算符会展开一层数组)
concat + apply(主要是如纤利用 apply 在绑定作用域时,传入的第二个参数是一个数组或者类数组对象,其中的数组元素将作为单独的参数传给 func 函数。也就是在调用 apply 函数的过程中,会将传入的数组一个一个渣闷仿的传入到要执行的函数中,也就是相当对数组进行了一层的展开。)
toString + split(不推荐使用 toString + split 方法,因为操作字符串是很危险的事情,如果数组中的元素所有都是数字的话,toString + split 是可行的,并且是一步搞定。)
最终手写的flat()方法为:
参考博客如下,注明罩颂一下出处,感谢大神们,希望自己可以多多练习,多多回顾:
三元博客
JS数组rece()方法详解及高级技巧
数组flat方法实现
㈦ 前端面试题:怎么把一个类数组对象转化为数组
var students = [];
students[students.length] = new Object();
students[students.length] .name = "戚配Lanny";
students[students.length] .age = "25";
students[students.length] .location = "China"咐仔并;
var json = JSON.stringify(students);
var student = new Object();
student.name = "Lanny"衡迹;
student.age = "25";
student.location = "China";
students = (students || []).push(student);
var json = JSON.stringify(students);
㈧ spring MVC 怎么获取前端传递的数组参数
spring MVC controller获取前端传递的数组参数的方法是进行封装json字符串实现的。
1、jsp页面中的数组创建如下:
var myArray = []; 定义数组myArray
myArray .push("OU=Software,DC=example,DC=com,"); 向数组中添加第一个字符串
myArray .push("OU=IT,DC=example,DC=com,");向数组中添加第二个字符串
转换json数组:
myArray = JSON.stringify(myArray ); 利用json的stringify方法把js对象转换成json对象
$("#ADOus").attr("action","${ctx}/ADSetting?myOUsArray ="+ myArray );设置action参数
$("#ADOus").submit();提交action到对应的controller
2、在controller层的处理如下:
@RequestMapping(value = { "/ADSetting" }, method=RequestMethod.POST) 定义url和提交方法,规定post
public String configureOUs(HttpServletRequest request,@RequestParam("myOUsArray ") String[] myOUsArray ){
ObjectMapper mapper = new ObjectMapper(); //创建对象映射对象
String [] array = mapper.readValue(jsonString, String[].class): //从映射域中读取数组参数,以json 字符串的方式
接下来需要把接收到的参数转换成json对象来处理。
return 定义的页面
}
㈨ 前台如何传数组
在使用SpringMVC时,我们想传递数组引用类型,SpringMVC对数组传递有些限制:
经过测试:SpringMVC支持一维数组的参数传递,不支持多维数组的参数传递,如果想传递多维数组,那么我们只好改用其他的办法如:1、将多维数组拆成一维数组;2、将多维数组改为集合传递;3、或者改为字符串,接收时间处理一下等等,4、或者将所有数组中的值拼接传递(例如:data=1&data=2&data=3,代表三个数组的值)方法很灵活。
SpringMVC传递一维数组:传递数组类型时,需要在@requestParam()中添加value,否则会出现HTTP Status 400 - Required long[] parameter 'data' is not present错误。
例如: @RequestParam(value = "data[]")long[] data
前端请求:
var dataArr = new Array();
for(var i = 0; i < 10; i++){
dataArr.push(i);
}
$.ajax({
url : "test/arrayParam.shtml",
data : {
"datas" : dataArr
},
dataType : "json",
success : function(data) {
alert(data);
},
async : false
});
}
后端代码:
package com.pyc.search.view.controller;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;
@Controller
@RequestMapping("/test")
public class TestController {
@RequestMapping("/arrayParam")
public @ResponseBody
int test1(@RequestParam(value = "datas[]") long[] datas) {
return datas.length;
}
}
2 多维数组可以转换为一维数组,或者转换为字符串,在后端接收时处理一下。
㈩ 前端怎么把数组传给后端啊
前台核心代码
var misGroup = new Array();
var srcGroup = new Array();
$.ajax({
type : "POST",
url : "preplan_preplan_savePreplan.action",
dataType : "json",
traditional : true,
data : {
//此处misArray跟后台对应
misArray : misGroup,
//此处srcArray跟后台对应
srcArray : srcGroup
},
success : function() {
}
});