在JavaScript中,如何比较正在使用的两个相似值并相应地分配它们?

在JavaScript中,如何比较正在使用的两个相似值并相应地分配它们?,javascript,Javascript,因此,我在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> <labe

因此,我在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>
然后,我进一步:

var findUserByStateOrRegion = function(stateOrRegion) {
  for (i = 0; i < users.length; i++) {
    var u = users[i];
    if (u.states.includes(stateOrRegion)) {
      return u;
    }
  }
};

不起作用。没有错误或任何东西出现。但这显然没有影响到这个国家。

首先,我相信你的JS中可能有错误

let users = [
 {
  default: true,
  name: 'Bill',
  states: ['South America', 'Canada', 'Asia']
 },{
  name: 'Frank',
  states: ['AK', 'AZ', 'CA']
 }]
根据你的场景,看起来弗兰克和比尔应该是分开的对象,而不是让比尔成为弗兰克的孩子

在本例中,您试图做的是为2+结果指定一个特定值。在这种情况下,标准解决方案是对州/省使用2位代码,而国家使用3位代码

将您的状态“key”视为主键/变量。您正在更改该变量的值,因此需要另一个键

或者,如果需要2位国家/地区代码,则需要唯一标识国家/地区。您可以将另一个属性添加到对象中,以分别存储国家/地区和州/省(我不建议这样做,但这是另一种选择)

祝你好运

----编辑----

经进一步审查。您能否澄清您是否匹配CA:California和CA:Canada,或者您的函数(.include)是否同时匹配“CAlifornia”和“CAnada”,如果是这种情况,则是由于非严格匹配。
如果您对比较实施“严格”匹配,您只会返回与您的要求完全匹配的结果。

因此,与其与州/国家/地区混为一谈,而不是专门针对那些命中精确对象的对象进行匹配,而是针对被匹配对象的数量进行匹配,因为这是一个问题,特别是一个人只能得到两个

 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();
};
var findUserByLocations=函数(位置){
var匹配;
如果(locations.length!==2){
对于(变量i=0;i

是的,我知道如果有一天这一点适用于其他人,它就会分崩离析。

有单独的功能来查看国家和查看州吗?为什么同一个函数必须同时处理这两个问题?还可以为国家和州使用单独的属性。为
国家
使用单独的属性。。。不要这样混用数据,否则你会自食其果。亚洲和南美洲不是州。根据两个字母缩写的ISO标准,加利福尼亚和加拿大都使用CA。这就是为什么这是一个问题。之所以使用状态,是因为在七个帐户执行者中,有六个负责处理状态,最后一个(默认值)负责处理其他所有事务。我想写这篇文章的开发人员最初认为创建一个额外的函数来查找国家是不切实际的。两位数的国家/州代码是将值传递给HubSpot表单的要求。如果Canada在我的JS数组中切换到“CA”的值,那么它会击中Bill,然后Bill也会得到California。在这种情况下,我建议使用以下场景:“如果要求使用2位国家/地区代码,则需要唯一标识国家/地区。您可以将另一个属性添加到对象中,以分别存储国家/地区和州/省。“具体要求是什么,更改的限制是什么。如果我了解更多,我可能能够提供更好的详细信息。
{
 default: true,
 name: 'Bill',
 country: 'CA',
 states: ['South America', 'CA', 'Asia']
}
let users = [
 {
  default: true,
  name: 'Bill',
  states: ['South America', 'Canada', 'Asia']
 },{
  name: 'Frank',
  states: ['AK', 'AZ', 'CA']
 }]
 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();
};