我很难搞清楚如何移动数组元素.例如,给出以下内容:
var arr = [ 'a', 'b', 'c', 'd', 'e'];
Run Code Online (Sandbox Code Playgroud)
我怎么能写一个'd'以前移动的函数'b'?
还是'a'之后'c'?
移动后,应更新其余元素的索引.这意味着在第一个例子中,移动arr [0]将='a',arr [1] ='d'arr [2] ='b',arr [3] ='c',arr [4] = 'E'
这看起来应该很简单,但我无法绕过它.
如果我使用:
1.09 * 1; // returns "1.09"
Run Code Online (Sandbox Code Playgroud)
但如果我使用:
1,09 * 1; // returns "9"
Run Code Online (Sandbox Code Playgroud)
我知道1,09不是一个数字.
逗号在最后一段代码中做了什么?
if (0,9) alert("ok"); // alert
if (9,0) alert("ok"); // don't alert
Run Code Online (Sandbox Code Playgroud)
alert(1); alert(2); alert(3); // 3 alerts
alert(1), alert(2), alert(3); // 3 alerts too
Run Code Online (Sandbox Code Playgroud)
alert("2",
foo = function (param) {
alert(param)
},
foo('1')
)
foo('3'); // alerts 1, 2 and 3
Run Code Online (Sandbox Code Playgroud) 鉴于阵列:
var arr = [ "one", "two", "three" ];
Run Code Online (Sandbox Code Playgroud)
什么是最简单的方法将其转换为:
{ "one": true, "two": true, "three": true }
Run Code Online (Sandbox Code Playgroud)
我试过以下但我想有更好的方法.
_.zipObject(arr || {}, _.fill([], true, 0, arr.length))
Run Code Online (Sandbox Code Playgroud) 我有这个源代码:
function findMessageErrors(btn) {
var error = "";
var message = $(btn).parent().siblings().find("textarea[name='message']").val();
if (message === "") {
error += "*Please enter a message.<br/>";
}
if (!$(btn).parent().siblings().find('input[name="agree"]').prop('checked')) {
error += "*Please agree.<br/>";
}
return error;
}
Run Code Online (Sandbox Code Playgroud)
这会被缩小。缩小后,它在 Chrome 开发工具的 Sources 选项卡中看起来像这样:
function findMessageErrors(btn) {
var error = "";
return "" === $(btn).parent().siblings().find("textarea[name='message']").val() && (error += "*Please enter a message.<br/>"),
$(btn).parent().siblings().find('input[name="agree"]').prop("checked") || (error += "*Please agree.<br/>"),
error
}
Run Code Online (Sandbox Code Playgroud)
我理解逗号运算符如何“按顺序运行一系列表达式,然后返回最后一个表达式的结果” (来自此处)。但我很难理解这些 OR 和 AND 运算符如何构建在缩小代码中返回的字符串。
有谁有一种有用的方法来大声朗读它,以帮助我理解它是如何工作的?我想我没有看到源代码中的 2 个独立 IF 语句如何被缩小为一系列 && 然后 …
我在搞乱AST树解析器,发现一个ReturnStatement可以有多个expressions。如下面的代码片段所示,return语句后有多个值,但代码已编译并成功运行(它返回的最后一个值)。
function test() {
return 1, 2, 3;
}
console.log(test());Run Code Online (Sandbox Code Playgroud)
AST形式:
{
"type": "ReturnStatement",
"start": 13,
"end": 24,
"argument": {
"type": "SequenceExpression",
"start": 20,
"end": 23,
"expressions": [{
"type": "Literal",
"start": 27,
"end": 28,
"value": 1,
"raw": "1"
}, {
"type": "Literal",
"start": 30,
"end": 31,
"value": 2,
"raw": "2"
}, {
"type": "Literal",
"start": 33,
"end": 34,
"value": 2,
"raw": "3"
}]
}
}
Run Code Online (Sandbox Code Playgroud)
此功能和/或错误的意义是什么?
您什么时候要使用此语法?