javascript - 修改后保留原始数组顺序?

标签 javascript arrays

我正在尝试修复数据库中行的命名约定格式错误的 View 。我无法在查询本身中更正这些约定,因为它会影响网站内的许多功能。因此,我决定使用 JavaScript 正确地重命名它们,以便它们在 View 中以正确的命名约定显示。

为此,我必须编写查询,使其返回一个虚构的数组,如下所示:

原始数组

['Tree_Domestic'、兔子、独 Angular 兽、Cheetah_Domestic、鲨鱼、Whale_Domestic]

我想要的是扫描整个数组,只找到具有“_domestic”或“_international”的条目,并将其替换为“_international”。例如,[Rabbit,Unicorn,Shark] 没有 _domestic,也没有 _international,所以我希望它们像这样:

[Rabbit_International,Unicorn_International ,Shark_International]

我成功地做到了这一点,但我遇到了最后一个问题,

它按字母顺序修改了数组的顺序,但我不希望这样。我希望数组看起来像这样:

['Tree_Domestic'、Rabbit_International、Unicorn_International、Cheetah_Domestic、Shark_International、Whale_Domestic]

我需要它看起来像这样的原因是因为在我的查询中,我也在计算最受欢迎的行,如果我用我的计数修改数组,计数将不会与数组保持正确的顺序使用修改后的数组排序的项目。

这是我的查询:

$sql = 'SELECT animals,
			COUNT(*)
			FROM fictional_signup
			WHERE usergroup NOT IN (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)
		 	GROUP BY popular
		 	ORDER BY COUNT(*) DESC';

Javascript

var renameLocations = [];

dataLabel = <?php echo json_encode($locations) ?>;
dataCount = <?php echo json_encode($count) ?>;

for(t = 0; t < dataLabel.length; t++){
  if(dataLabel[t].includes('_Domestic') || dataLabel[t].includes('_International')){
    renameLocations.push(dataLabel[t]); 
  }
}
for(z = 0; z < dataLabel.length; z++){
  if(!dataLabel[z].includes('_Domestic') && !dataLabel[z].includes('_International')){
    renameLocations.push(dataLabel[z] + "_International"); 
  }
}

// Returns the correct naming conventions but the order is incorrect with the count.
console.log(renameLocations);

最佳答案

您可以使用Array.prototype.map()函数创建一个带有修改后的条目的新数组。

/*
$locations = [
    'Tree_Domestic',
    'Rabbit',
    'Unicorn',
    'Cheetah_Domestic',
    'Shark',
    'Whale_Domestic'
]
*/
dataLabel = <?php echo json_encode($locations) ?>.map(
    // "e" represents each entry in the array, one at a time
    function(e){
        // if the entry ends with _Domestic or _International,
        // then just keep the value
        if (e.endsWith('_Domestic') || e.endsWith('_International'))
            return e;
        // otherwise, append "_International" to the entry and use that
        else
            return e + "_International";
    }
)

产品:

[
    "Tree_Domestic",
    "Rabbit_International",
    "Unicorn_International",
    "Cheetah_Domestic",
    "Shark_International",
    "Whale_Domestic"
]

关于javascript - 修改后保留原始数组顺序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51565860/

相关文章:

javascript - 如何以编程方式命名数组

arrays - fos elasticabundle 映射类型 "array"

javascript - 是什么阻止 HtmlUnit 加载 PSN 商店页面?

javascript - .map() 一个 Javascript ES6 map ?

c - 将数组传递给c中的函数

arrays - 为什么访问这个 N3 数组?

javascript - AngularJS 中的 $scope 不起作用

javascript - 实现HTML Canvas 图像着色功能

javascript - 是否可以使用正则表达式 chop 字符串的开头?

c++ - 如何从用户定义的函数返回一个 3D 数组?