JavaScript 是否有类似于 php list 命令的语言结构?
Does JavaScript have a language construct similar to the php list command?
JavaScript 是否有语言结构或类似于 php 列表命令的东西? http://php.net/manual/en/function.list.php
此命令将在单个语句中将数组的值分配给变量。例如,给定数组:
$info = array('Coffee', 'brown', 'caffeine');
list 命令会将每个数组元素值分配给命名变量:
list($drink, $color, $power) = $info;
这样:
echo "$drink is $color and $power makes it special."; // results in:
Coffee is brown and caffeine makes it special.
所以这是一种在一条语句中为多个变量赋值的简单方法。
JavaScript是否有一些等效的东西,其中每个变量不必单独分配?
有没有办法使用对象的属性或数组的元素来做到这一点?如果没有,是否可以编写一个函数来做到这一点?如果这样做的唯一方法是通过函数,那么该函数将需要访问定义变量的范围。
我尝试了这个已有五年历史的问题的解决方案:Javascript equivalent of PHP's list(),但它们不起作用。数组原型更改无法在我的 node.js 环境中分配变量,左手数组分配是 Chrome 中的引用错误。有关于一项实验性新技术的讨论,但讨论已经有好几年了。我想知道是否有比链接问题中列出的解决方案更好的解决方案。
有一个php.js写的实验函数试图将php的列表函数适配到js,也许你可以在此基础上构建:
function list() {
// http://kevin.vanzonneveld.net
// + original by: Brett Zamir (http://brett-zamir.me)
// % note 1: Only works in global context and deviates (by necessity) from
// % note 1: PHP version by adding the array (which in PHP is an rvalue
// % note 1: separate from the list() lvalue) as the last argument
// * example 1: var drink, color, power;
// * example 1: list('drink', 'color', 'power', ['coffee', 'brown', 'caffeine']);
// * example 1: drink +' is '+color+' and '+power+' makes it special.\n';
// * returns 1: 'coffee is brown and caffeine makes it special.\n'
var i = 0, arr = [];
arr = arguments[arguments.length - 1];
if (arr && typeof arr === 'object' && arr.change_key_case) { // Duck-type check for our own array()-created PHPJS_Array
return arr.list.apply(arr, Array.prototype.slice.call(arguments, 0, -1));
}
if (arr && typeof arr === 'object' && arr.length && !arr.propertyIsEnumerable('length')) {
for (i = 0; i < arr.length; i++) {
this.window[arguments[i]] = arr[i];
}
}
else {
for (i in arr) {
if (i.length === parseInt(i).toString().length && parseInt(i) < arguments.length - 1) {
this.window[arguments[i]] = arr[i];
}
}
}
return arr;
}
我刚刚编写了一个简单的函数,并且可以运行。只是不完全像 php 中的列表。在这里
function list(fn,array){
if(fn.length && array.length){
for(var i=0;i<array.length;i++){
var applyArray = [];
for(var j=0;j<array[i].length;j++){
fn[j] = array[i][j];
applyArray.push(fn[j]);
}
fn.apply(this,applyArray);
}
}
}
没什么了不起的,但如果您正在寻找适合自己的简单用例,那就是它。
这个怎么用?
//array array mixture for composure
var arrayMixture = [ ["coffee","sugar","milk"], ["tea","sugar","honey"] ];
//call our function
list(function(treat,addin,addin2){
console.log("I like "+treat+" with " + addin + " and " + addin2);
},arrayMixture);
//output:
//I like coffee with sugar and milk
//I like tea with sugar and honey
希望这就是您要找的东西
这在 ECMAScript 6 中称为 "destructuring assignment"。Mozilla Developer Network 有一些示例:
var a, b;
[a, b] = [1, 2]
{a, b} = {a:1, b:2}
它在 Node.js 中受支持,至少从版本 8 开始,并且在某些浏览器中也受支持,如您在此 ECMAScript compatibility table. You can still use it if you transpile your code to ECMAScript 5 with something like Babel.
中所见
我认为对于没有嵌套数组的情况,可以大大简化已接受的 by EasyBB。
var info = [ "Coffee", "brown", "caffeine" ];
(function(drink, color, power) {
console.log(drink + " is " + color + " and " + power + " makes it special.");
}.apply(this, info));
现在您不必定义额外的函数来完成工作。当然,如果采用ES6就更好了,我们可以使用数组解构。与此同时,我可能只会使用老式的 var drink = info[0], color = info[1], power = info[2];
;它更具可读性并且使用更少的内存。
JavaScript 是否有语言结构或类似于 php 列表命令的东西? http://php.net/manual/en/function.list.php
此命令将在单个语句中将数组的值分配给变量。例如,给定数组:
$info = array('Coffee', 'brown', 'caffeine');
list 命令会将每个数组元素值分配给命名变量:
list($drink, $color, $power) = $info;
这样:
echo "$drink is $color and $power makes it special."; // results in:
Coffee is brown and caffeine makes it special.
所以这是一种在一条语句中为多个变量赋值的简单方法。
JavaScript是否有一些等效的东西,其中每个变量不必单独分配?
有没有办法使用对象的属性或数组的元素来做到这一点?如果没有,是否可以编写一个函数来做到这一点?如果这样做的唯一方法是通过函数,那么该函数将需要访问定义变量的范围。
我尝试了这个已有五年历史的问题的解决方案:Javascript equivalent of PHP's list(),但它们不起作用。数组原型更改无法在我的 node.js 环境中分配变量,左手数组分配是 Chrome 中的引用错误。有关于一项实验性新技术的讨论,但讨论已经有好几年了。我想知道是否有比链接问题中列出的解决方案更好的解决方案。
有一个php.js写的实验函数试图将php的列表函数适配到js,也许你可以在此基础上构建:
function list() {
// http://kevin.vanzonneveld.net
// + original by: Brett Zamir (http://brett-zamir.me)
// % note 1: Only works in global context and deviates (by necessity) from
// % note 1: PHP version by adding the array (which in PHP is an rvalue
// % note 1: separate from the list() lvalue) as the last argument
// * example 1: var drink, color, power;
// * example 1: list('drink', 'color', 'power', ['coffee', 'brown', 'caffeine']);
// * example 1: drink +' is '+color+' and '+power+' makes it special.\n';
// * returns 1: 'coffee is brown and caffeine makes it special.\n'
var i = 0, arr = [];
arr = arguments[arguments.length - 1];
if (arr && typeof arr === 'object' && arr.change_key_case) { // Duck-type check for our own array()-created PHPJS_Array
return arr.list.apply(arr, Array.prototype.slice.call(arguments, 0, -1));
}
if (arr && typeof arr === 'object' && arr.length && !arr.propertyIsEnumerable('length')) {
for (i = 0; i < arr.length; i++) {
this.window[arguments[i]] = arr[i];
}
}
else {
for (i in arr) {
if (i.length === parseInt(i).toString().length && parseInt(i) < arguments.length - 1) {
this.window[arguments[i]] = arr[i];
}
}
}
return arr;
}
我刚刚编写了一个简单的函数,并且可以运行。只是不完全像 php 中的列表。在这里
function list(fn,array){
if(fn.length && array.length){
for(var i=0;i<array.length;i++){
var applyArray = [];
for(var j=0;j<array[i].length;j++){
fn[j] = array[i][j];
applyArray.push(fn[j]);
}
fn.apply(this,applyArray);
}
}
}
没什么了不起的,但如果您正在寻找适合自己的简单用例,那就是它。
这个怎么用?
//array array mixture for composure
var arrayMixture = [ ["coffee","sugar","milk"], ["tea","sugar","honey"] ];
//call our function
list(function(treat,addin,addin2){
console.log("I like "+treat+" with " + addin + " and " + addin2);
},arrayMixture);
//output:
//I like coffee with sugar and milk
//I like tea with sugar and honey
希望这就是您要找的东西
这在 ECMAScript 6 中称为 "destructuring assignment"。Mozilla Developer Network 有一些示例:
var a, b;
[a, b] = [1, 2]
{a, b} = {a:1, b:2}
它在 Node.js 中受支持,至少从版本 8 开始,并且在某些浏览器中也受支持,如您在此 ECMAScript compatibility table. You can still use it if you transpile your code to ECMAScript 5 with something like Babel.
中所见我认为对于没有嵌套数组的情况,可以大大简化已接受的
var info = [ "Coffee", "brown", "caffeine" ];
(function(drink, color, power) {
console.log(drink + " is " + color + " and " + power + " makes it special.");
}.apply(this, info));
现在您不必定义额外的函数来完成工作。当然,如果采用ES6就更好了,我们可以使用数组解构。与此同时,我可能只会使用老式的 var drink = info[0], color = info[1], power = info[2];
;它更具可读性并且使用更少的内存。