gpt4 book ai didi

javascript - JS 字符串解析像 jQuery 一样添加和删除值

转载 作者:行者123 更新时间:2023-11-28 15:46:24 24 4
gpt4 key购买 nike

最终,我尝试重新创建 jQuery addClass 和 removeClass 方法的字符串解析行为,只是我想对传递给函数的字符串执行此操作。不幸的是,JS 并不是我最擅长的语言,尤其是在可用的字符串解析函数方面。下面是 JS 中的一些 sudo 代码,用于显示我想要的方法签名。

function addValue(str, value){
// Add value to string if it does not all ready have it. Do not duplicate values
}

function removeValue(str, value){
// Remove value from string if it is applied
}

我不知道如何在 JS 中执行此操作。如果我在 PHP 中执行此操作,下面是我将使用的代码。

function addValue(&$str, $newValue)
{
$newValue = trim($newValue);
$values = explode(' ', $str);
if (!in_array($newValue, $values)) {
$values[] = $newValue;
}

$str = implode(' ', $values);
}

function removeValue(&$str, $value)
{
$values = explode(' ', $str);
if($index = array_search($value, $values)){
unset($values[$index]);
}
$str = implode(' ', $values);
}

我还没有测试该 PHP 代码,但希望这足以让人们理解我想要做什么。我的问题是,这里提供的 PHP 代码的 JS 等价物是什么?

<小时/>

解决方案

我最终选择了 Nouphal.M 代码,因为它似乎对 x 浏览器更友好,并且可以很好地处理空字符串 ('')。感谢大家对此提供的帮助。下面我的最终代码采用 jQuery 函数的形式。我可能应该早些时候提到,我的目标字符串存储在 $(elm).data() 中,因此我能够获得所需的行为,即不必返回任何内容。

编辑我重构了这些函数,使它们位于 String 类中。您需要使用此方法重新分配值,如下所示 str = str.addWord('something');我保留了 jQuery 函数,但我觉得这个方法更通用一些,并且对于下一个需要执行此操作的开发人员可能更有用。

String.prototype.addWord =
function (value) {
var str = this;

var arr = str.split(" ");
var found = false;
for (var i = 0; i < arr.length; i++) {
if (arr[i] == value) {
found = true;
}
}
if (found == false) {
str += " " + value;
}
return str;
}

String.prototype.removeWord =
function (value) {
var str = this;
var arr = str.split(" ");
str = "";
for (var i = 0; i < arr.length; i++) {
if (arr[i] != value) {
str += arr[i] + " ";
}
}
return str.substring(0, str.length - 1);
}

最佳答案

你可以这样做:

function addValue(str, newVal) {
var values = str.match(/\S+/g) || [];
if (values.indexOf(newVal) === -1) values.push(newVal);
return values.join(' ');
}

function remValue(str, val) {
var values = str.match(/\S+/g) || [],
idx = values.indexOf(newVal);
if (idx !== -1) values.splice(idx, 1);
return values.join(' ');
}

对于 IE8 支持,您可以将 values.indexOf(newVal) 替换为 jQuery.inArray(newVal, value)。这里还有另一个解决方法:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/indexOf

定制的:

function indexOf(array, value) {
var i = -1, l = array.length;
while (++i < l) {
if (array[i] === value) return i;
}
return -1;
}

关于javascript - JS 字符串解析像 jQuery 一样添加和删除值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22117228/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com