javascript中是不是有类似于php中的compact的功能?
Posted
技术标签:
【中文标题】javascript中是不是有类似于php中的compact的功能?【英文标题】:Is there a function in javascript similar to compact from php?javascript中是否有类似于php中的compact的功能? 【发布时间】:2013-04-22 15:40:28 【问题描述】:我发现compact
函数非常有用(在 php 中)。它的作用如下:
$some_var = 'value';
$ar = compact('some_var');
//now $ar is array('some_var' => 'value')
因此,当元素的键是变量名时,它会从您指定的变量创建数组。 javascript中有什么功能吗?
【问题讨论】:
请考虑将接受的答案更改为***.com/a/45884534/6047611 完成。但是在 *** 上 4 年后改变接受的答案似乎不寻常。 谢谢,这将有助于下一个找到此帖子的人???????? 【参考方案1】:没有类似的功能,也没有任何方法可以获取当前上下文的变量名称/值——只有当它们是window
上的“全局”变量时,不推荐这样做。如果是,您可以这样做:
function compact()
var obj = ;
Array.prototype.forEach.call(arguments, function (elem)
obj[elem] = window[elem];
);
return obj;
【讨论】:
这似乎很危险且不可取,我不推荐这种方法。一个更好的解决方案是 > ***.com/a/45884534/1757364 @Gavin 同意,这个答案是 5 岁。对象初始化简写现在很常见,是一种更好的方法。【参考方案2】:您也可以使用phpjs library 在javascript中使用与php中相同的功能
示例
var1 = 'Kevin'; var2 = 'van'; var3 = 'Zonneveld';
compact('var1', 'var2', 'var3');
输出
'var1': 'Kevin', 'var2': 'van', 'var3': 'Zonneveld'
【讨论】:
谢谢我忘了递归压缩【参考方案3】:如果变量不在全局范围内,这仍然是可能的,但不实用。
function somefunc()
var a = 'aaa',
b = 'bbb';
var compact = function()
var obj = ;
for (var i = 0; i < arguments.length; i++)
var key = arguments[i];
var value = eval(key);
obj[key] = value;
return obj;
console.log(compact('a', 'b')) // a:'aaa',b:'bbb'
好消息是 ES6 有一个新特性可以做到这一点。
var a=1,b=2;
console.log(a,b) // a:1,b:2
【讨论】:
【参考方案4】:你可以使用 ES6/ES2015 Object initializer
例子:
let bar = 'bar', foo = 'foo', baz = 'baz'; // declare variables
let obj = bar, foo, baz; // use object initializer
console.log(obj);
bar: 'bar', foo: 'foo', baz: 'baz' // output
注意浏览器的兼容性,你总是可以使用Babel
【讨论】:
以上是关于javascript中是不是有类似于php中的compact的功能?的主要内容,如果未能解决你的问题,请参考以下文章
python中有没有办法解压缩类似于javascript中的传播运算符的列表? [复制]
Javascript Mismatch 中的 PHP Pack/Unpack 实现