如何解决Javascript Array.map函数
我试图通过在其中的每个项目上运行一个函数来编辑整个数组,该函数检查它的第一个字符是否带有双引号,然后将其切出。该代码如下所示:
args = args.map(function(arg){
if(arg.substring(0,1) === "\""){
return arg.substring(1)
}
})
运行此代码时,返回以下错误:
c:\Users\oreos\Desktop\itachi js\index.js:97
if(arg.substring(arg.length()-1,arg.length()) === "\""){
^
TypeError: Cannot read property 'substring' of undefined
函数的参数通常可以在函数内的if语句中使用,所以我不知道为什么它在这里返回undefined。此列表中确实有项目。
解决方法
您在空数组上使用map函数。因此,在尝试在其上调用map之前,只需在args数组中填充一些值即可。
,例如,如果您拥有:
args = ["a","b",'"c"'];
args = args.map(arg=>arg.slice(0,1)=='"'?arg.slice(1,-1):arg)
返回
["a","c"]
,
假设您有一个看起来像这样的数组['"item1"','item2','"item3"','item4'];
let arr = ['"item1"','item4'];
let newArr = arr.filter(element => (/^[^\"]/).test(element.trim()))
console.log(newArr); // item2,item4
,
尝试一下:
let args = ['"abc','a"',"bc"];
const yourFunction = args.map(arg => {
console.log(arg)
if(arg.substring(0,1) === "\""){
return arg.substring(1);
}
if(arg.substring(arg.length - 1,arg.length) === "\""){
return arg.substring(1);
}
});
console.log(yourFunction);
,
TypeError:无法读取未定义的属性“子字符串”
您正在映射一个在特定索引处包含未定义元素的数组,现在在这种情况下,在使用任何函数之前,您需要确保arg不是未定义的,如:
args = args.map(function(arg){
if(arg!==undefined){
if(arg.substring(0,1) === "\""){
return arg.substring(1)
}
}
})
这将确保您未在未定义的元素上使用任何成员函数,希望这会有所帮助!
,看起来您的args数组具有除字符串之外的其他类型的元素。因此,请确保args数组的元素是字符串。
如果您尝试创建仅包含以双引号开头的那些元素的数组(当然,在删除该双引号之后),map()
是一个不好的选择,因为它将undefined
添加到结果数组。在这种情况下,forEach()
是更好的选择。
var newArgs = [];
args.forEach(arg => {
if(arg[0] === '"'){
newArgs.push(arg.substring(1));
}
});
如果您试图创建一个数组,其中所有args元素都将被删除,但有些args元素中的双引号被删除(如果它是第一个字符),那么map()
是一个不错的选择,但是它的使用方式有误。
args = args.map(function(arg){
if(arg.substring(0,1) === "\""){
return arg.substring(1);
}
// what if the above `if` statement is false?
// This function is not returning anything in such case.
});
正确用法是:
args = args.map(arg => (arg[0] === '"') ? arg.substring(1): arg);
var args = ['test1','"test2','test3','"test4','"test5'];
var newArgs = [];
args.forEach(arg => {
if(arg[0] === '"'){
newArgs.push(arg.substring(1));
}
});
console.log('forEach: ' + newArgs);
// returns ["test2","test4","test5"]
// Your code in question:
newArgs = args.map(function(arg){
if(arg.substring(0,1) === "\""){
return arg.substring(1);
};
});
console.log('Your code: ' + newArgs);
// returns [undefined,"test2",undefined,"test5"]
// If you want to get all elements but with double quote removed (if present as first character
newArgs = args.map(arg => (arg[0] === '"') ? arg.substring(1): arg);
console.log('proper map: ' + newArgs);
// returns ["test1","test3","test5"]
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。