所以我的Rails应用程序中有一个表单需要使用缩写传递选项值。例如:
<label for="country-north-america">Country</label>
<select class="form-control" name="country-north-america" id="country-north-america>
<option value="CA">Canada</option>
<label for="state">State></label>
<select class="form-control" name="state" id="state">
<option value="CA">California</option>
然后在我的JS文件中,我将状态分配给客户经理:
let users = [
{
default: true,
name: 'Bill',
states: ['South America', 'Canada', 'Asia']
},
name: 'Frank',
states: ['AK', 'AZ', 'CA']
}]
然后我还有:
var findUserByStateOrRegion = function(stateOrRegion) {
for (i = 0; i < users.length; i++) {
var u = users[i];
if (u.states.includes(stateOrRegion)) {
return u;
}
}
};
所以问题是,对于加拿大的Frank来说,因为价值是CA.但是,如果我将JS中的加拿大更新为CA,那么加利福尼亚将转到Bill。我想弄清楚的是如何使用CA作为值将加拿大分配给Bill。
编辑:尝试以下内容:
var findUserByStateOrRegion = function(stateOrRegion) {
for (i = 0; i < users.length; i++) {
var u = users[i];
if (u.states === 'CA' && u.country === 'CA') {
return u.default;
}
else (u.states.includes(stateOrRegion)) {
return u;
}
}
};
然后将默认值设为以下内容:
{
default: true,
name: 'Bill',
country: 'CA',
states: ['South America', 'CA', 'Asia']
}
没用。没有错误或任何存在。但这显然不会影响到这个国家。
答案 0 :(得分:0)
对于初学者,我相信你的JS可能存在错误。
let users = [
{
default: true,
name: 'Bill',
states: ['South America', 'Canada', 'Asia']
},{
name: 'Frank',
states: ['AK', 'AZ', 'CA']
}]
根据您的情况,看起来Frank和Bill应该是单独的对象,而不是让Frank成为Frank中的孩子。
在这种情况下,您尝试做的是为2+个结果分配特定值。在这种情况下,标准解决方案是为州/省使用2位数代码,而国家/地区使用3位数代码。
将您的状态“key”视为主键/变量。您正在更改该变量的值,而是需要另一个键。
另外,如果需要2位数国家/地区代码,则需要唯一标识国家/地区。你可以在你的对象中添加另一个属性来分别存储国家和州/省(我不建议这样做,但这是另一种选择)。
祝你好运。
---- ---- EDIT
进一步审查。您是否可以澄清您是否匹配CA:加利福尼亚州和CA:加拿大,或者如果您的功能(.include)与“ CA lifornia”和“ CA ”相匹配nada“,如果是这样,那是因为非严格匹配。 如果您为比较强制执行“严格”匹配,则只会返回与您的要求完全匹配的匹配。
答案 1 :(得分:0)
因此,不是搞乱状态/国家/地区,而是专门针对那些确切对象的匹配,而是匹配匹配的对象的数量,因为这是一个人的问题,特别是只有两个人。
var findUserByLocations = function(locations) {
var match;
if (locations.length !== 2) {
for (var i = 0; i < locations.length; i++) {
match = users.find(function(user) {
return user.states.includes(locations[i]);
});
if (match) return match;
}
}
return findDefaultUser();
};
是的,我知道如果有时候这种情况适用于其他人则会崩溃。