为什么结果字符串仅返回最后的结果值

时间:2018-01-19 06:48:50

标签: javascript arrays loops dictionary foreach

我有一个代码,它从用户输入的输入字段中获取一些值。我的JS代码应该检查所有必需的标题是否都不为空。如果没有,则应显示带有结果的alert消息。这是我的代码

var result = "";
function isStringEmpty(string2Check) 
{
    return string2Check == "" || string2Check[0] == " ";
};
var titles = 
[
    ["1", "This is 1st title(not empty)"],
    ["", "Suppose this is empty"],
    ["", "Suppose this is empty too"]
];
				
var titlesMap = new Map(titles);

titlesMap.forEach(function(key, value, titlesMap) 
{
    if(isStringEmpty(value)) 
    {
        result += 'Field ' + '"' + key + '"' +' cannot be empty!\n'
    }
});
result = result.replace(/\n$/, "");
alert(result);

请参阅?忽略“假设这是空的”(结果字符串不包含它):( result只接收最后一条结果消息。为什么?顺便说一下,为什么key和{地图中的{1}}属性搞砸了?(我认为键是“1”,值是“这是第一个标题(非空)”,但它不是..)我猜这是因为使用了数组作为属性......

2 个答案:

答案 0 :(得分:4)

您正在使用""并传递键/值对。地图中的键必须是唯一的。通过两次添加具有相同键(Map)的条目,您将用第二个覆盖第一个。

如果你不是那些作为键/值对,不要使用titlesMap,只需直接使用数组数组,如下所示(主要更改是删除forEach并在var result = ""; function isStringEmpty(string2Check) { return string2Check == "" || string2Check[0] == " "; }; var titles = [ ["1", "This is 1st title(not empty)"], ["", "Suppose this is empty"], ["", "Suppose this is empty too"] ]; titles.forEach(function(entry) { if(isStringEmpty(entry[0])) { result += 'Field ' + '"' + entry[1] + '"' +' cannot be empty!\n' } }); result = result.replace(/\n$/, ""); alert(result);):

isStringEmpty

旁注:您的" foo"函数会说function isStringEmpty(string2Check) { return !string2Check.trim(); } 为空。我认为那不是你想要做的。你可能只想要:

combined_file.txt

...为过时的浏览器填充String#trim

答案 1 :(得分:0)

如果您看到两个值为空

var titles = 
[
    ["1", "This is 1st title(not empty)"],
    ["", "Suppose this is empty"],
    ["", "Suppose this is empty too"]
];

当您进行映射时,那么映射时间键应该是唯一的。

var titlesMap = new Map(titles);

第一次映射时,值将为

["", "Suppose this is empty"]

这里的关键是===> “”和值假设这是空的

但之后它会覆盖键的值

["", "Suppose this is empty too"]

所以最后一个值将在假设这也是空的

你应该尝试不用映射