我正在尝试编写一个接受字符串列表或单个字符串的函数.如果它是一个字符串,那么我想将它转换为只有一个项目的数组.然后我可以循环它而不用担心错误.
那么我该如何检查变量是否是一个数组?
我已经完成了下面的各种解决方案,并创建了一个jsperf测试.
似乎没有办法用另一个数组扩展现有的JavaScript数组,即模拟Python的extend方法.
我想实现以下目标:
>>> a = [1, 2]
[1, 2]
>>> b = [3, 4, 5]
[3, 4, 5]
>>> SOMETHING HERE
>>> a
[1, 2, 3, 4, 5]
Run Code Online (Sandbox Code Playgroud)
我知道有一种a.concat(b)方法,但它创建了一个新的数组,而不是简单地扩展第一个.我想要一种算法,当a它明显大于b(即不复制的算法)时,它可以有效地工作a.
注意:这不是如何将某些内容附加到数组的副本? - 这里的目标是将一个数组的全部内容添加到另一个数组中,并"就地"执行,即不复制扩展数组的所有元素.
什么是确定JavaScript中的变量是否为数组的最佳事实标准跨浏览器方法?
在网上搜索有很多不同的建议,有些是好的,有些是无效的.
例如,以下是一种基本方法:
function isArray(obj) {
return (obj && obj.length);
}
Run Code Online (Sandbox Code Playgroud)
但是,请注意如果数组为空,或者obj实际上不是数组但实现了长度属性等会发生什么.
那么哪种实现在实际工作方面是最好的,跨浏览器并且仍然有效地执行?
如何在TypeScript中测试变量是否为字符串数组?像这样的东西:
function f(): string {
var a: string[] = ["A", "B", "C"];
if (typeof a === "string[]") {
return "Yes"
}
else {
// returns no as it's 'object'
return "No"
}
};
Run Code Online (Sandbox Code Playgroud)
TypeScript.io在这里:http://typescript.io/k0ZiJzso0Qg/2
编辑:我已经更新了文本,要求测试string [].这只是在之前的代码示例中.
所以我有一个函数,需要检查一个参数是否是一个对象,但这失败,因为:
typeof [] // returns 'object'
Run Code Online (Sandbox Code Playgroud)
这是一个经典的javascript问题,但我不记得该怎么做才能真正接受对象,而不是数组.
如何知道对象是否是数组?
var x=[];
console.log(typeof x);//output:"object"
alert(x);//output:[object Object]
console.log(x.valueOf())//output:<blank>? what is the reason here?
console.log([].toString()); also outputs <blank>
Object.prototype.toString.call(x) output:[object Array] how?
Run Code Online (Sandbox Code Playgroud)
自console.log([].toString()); 输出:空白
第一名:
为什么我在最后的第二个陈述中空白?
第二:
有没有办法确切知道对象是什么:数组或普通对象({})没有x.join()等各自方法的帮助,表明x是一个数组,而不是这种方式.
实际上,在jquery选择中,如$("p")返回jquery对象,所以如果我使用
console.log(typeof $("p"));//output:"object
Run Code Online (Sandbox Code Playgroud)
我只是想知道对象的实际名称.请它.谢谢你的帮助
我有一个简单/初学者的问题,在我的应用程序中使用小胡子模板(或更准确地说是Hogan).我使用的API有时会返回一个String,有时会返回一个字符串数组.
我知道可以将String包装在单个元素数组中,但是还有一种方法可以从胡子模板中处理这个选项吗?
使用普通部分
{{#stringOrArray}}
<li>{{.}}</li>
{{/stringOrArray}}
如果只是一个字符串,则不会打印该值.
在玩打字稿时,我遇到了以下有趣的行为:
class ExtArray<U> extends Array<U> {
constructor(...args : U[]) {
super(...args);
}
public contains(element : U) : boolean {
var i = this.indexOf(element);
return i !== -1;
}
}
var test : ExtArray<string> = new ExtArray("a", "b", "c");
test.push("y");
console.log(test.length); // 1
console.log(test[0]); // y
console.log(test[1]); // undefined
console.log("Has a: " + test.contains("a")); // Has a: false
console.log("Has y: " + test.contains("y")); // Has y : true
Run Code Online (Sandbox Code Playgroud)
我已将 console.log 语句的输出添加为注释。看此打字稿游乐场以获取可执行示例和 JavaScript 代码。
正如您所看到的,传递给构造函数的元素似乎没有添加到数组中。
Typescript 中的新增功能中有关扩展表达式的部分 …
从那两个帖子:
有几种方法可以检查一个对象是否是数组
variable instanceof Array
Array.isArray(variable)
有人告诉我,第二种方法比第一种方法好。有没有人能说出它的原因?
jQuery 1.7.1
有时我有一个元素作为数组,
<tr><td><input type="hidden" class="p" name="it" value="1"/></td></tr>
<tr><td><input type="hidden" class="p" name="it" value="2"/></td></tr>
Run Code Online (Sandbox Code Playgroud)
下面的jQuery代码有效,
$(".p").each(function(i){
alert($('.p')[i].value);
});
Run Code Online (Sandbox Code Playgroud)
有时我将该元素作为单个元素
<tr><td><input type="hidden" class="p" name="it" value="1"/></td></tr>
Run Code Online (Sandbox Code Playgroud)
我想在尝试执行上面的jQuery代码之前确保隐藏的输入是数组还是单个元素.我怎么能用jQuery做到这一点?
我有多个div返回这样的数组:
[{"k":"Model","v":"box"},{"k":"Color","v":"blue"},{"k":"Size","v":"med"},{"k":"Type","v":"good"}]
Run Code Online (Sandbox Code Playgroud)
有时,非数组项又回来了,我想忽略那些。
可以是空格或随机无序的空白列表。因此,我只想只处理返回的数组,其余的留空。
我如何检查它是否为数组,而忽略其余部分?
jQuery('.overview').each(function () {
var $overview = jQuery(this),
specs = jQuery.parseJSON($overview.html());
if ( !! specs) {
$overview.html('<div class="bullet_spec"></div>');
jQuery.each(specs, function () {
$overview.children('div').append('<ul class="specs"><li class="label">' + this.k + ' : ' + this.v + '</li></ul>');
});
} else { // leave blank?? not sure what to do here
}
});
Run Code Online (Sandbox Code Playgroud)
这是我的小提琴:http : //jsfiddle.net/veGPN/
谢谢
可能重复:
如何检测变量是否为数组
当我需要测试变量是否是一个数组时(例如函数中的输入参数可能是对象或数组)我通常使用这段代码
typeof(myVar) === 'object' && myVar.length !== undefined;
Run Code Online (Sandbox Code Playgroud)
这是正确的方法,还是有更有效的方法,考虑到即使 myVar instanceof Array 速度更快,也应该避免因iframe问题而避免?
javascript ×8
arrays ×6
jquery ×3
typescript ×2
constructor ×1
each ×1
hogan.js ×1
instanceof ×1
mustache ×1
typeof ×1
types ×1