在PHP中,你可以这样做:
$hello = "world";
$goodbye = "everyone";
$whatever = "taco";
$something = 5;
$hey = false;
$myArray = compact('hello','goodbye','whatever','something','hey');
现在您有以下数组:
[
'hello' => 'world',
'goodbye' => 'everyone',
'whatever' => 'taco',
'something' => 5,
'hey' => false
]
在vanilla JavaScript或NodeJS库中有这样的东西吗?
答案 0 :(得分:1)
The PHP.js project致力于将所有PHP的本机函数移植到JavaScript。
紧凑型功能可用here,我也会在下面复制它。
function compact() {
// discuss at: http://phpjs.org/functions/compact/
// original by: Waldo Malqui Silva (http://waldo.malqui.info)
// improved by: Jack
// input by: Brett Zamir (http://brett-zamir.me)
// bugfixed by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
// example 1: var1 = 'Kevin'; var2 = 'van'; var3 = 'Zonneveld';
// example 1: compact('var1', 'var2', 'var3');
// returns 1: {'var1': 'Kevin', 'var2': 'van', 'var3': 'Zonneveld'}
var matrix = {},
that = this;
var process = function(value) {
var i = 0,
l = value.length,
key_value = '';
for (i = 0; i < l; i++) {
key_value = value[i];
if (Object.prototype.toString.call(key_value) === '[object Array]') {
process(key_value);
} else {
if (typeof that.window[key_value] !== 'undefined') {
matrix[key_value] = that.window[key_value];
}
}
}
return true;
};
process(arguments);
return matrix;
}
答案 1 :(得分:0)
JavaScript无法使用用户定义的函数从当前符号表中读取。
您需要以另一种方式构建它,例如使用对象。
var obj = {
'hello': 'world'
};
如果使用全局对象(浏览器中为window
)使用全局对象或使用不应使用的eval()
,其他选择是查找它们。
答案 2 :(得分:0)
开箱即用?不可以。但是,您可以利用Array.prototype.reduce
之类的内容。
如果您的变量都附加到全局window
对象,那么您可以执行以下操作:
function compact() {
var args = Array.prototype.slice.call(arguments);
return args.reduce(function(t, c) {
if(c in window) t[c] = window[c];
return t;
}, {});
}
window
:这将利用以下事实:在浏览器环境中,全局变量的范围限定为window
对象。如果您没有window
对象怎么办?这样做:
function compact() {
var args = Array.prototype.slice.call(arguments);
return args.reduce(function(t, c) {
if(c in this) t[c] = this[c];
return t;
}.bind(this), {});
}
compact('some', 'global', 'variables');
这必须发生在顶级(即,无论你的全球环境在哪里)。
this
: