1
['string1', 'string2'].join(',') // "string1,string2"

如何获得以下结果?

"string1", "string2"

我正在使用下划线和 jquery。

我的目标是做这样的事情:

_.without(['string1', 'string2', 'string3'], "string1", "string2");
=> ['string3']
4

5 回答 5

2

对于您的情况,您不需要“免费”元素列表。
您只需要使用_.difference而不是_.without.

  _.difference(['string1', 'string2', 'string3'], ["string1", "string2"]);
于 2012-11-27T13:54:59.113 回答
2

你不能有一个“免费”的元素列表。这不是 Javascript 的工作方式。你总是处理数组、集合之类的东西。

我不太了解 Underscore.js,但试试这个:

var a = ['string1', 'string2', 'string3'],
    b = ['string1', 'string2'];
_.without.apply(_, [a].concat(b));

的目的apply是调用具有动态数量的动态参数的函数。

于 2012-11-26T15:37:27.567 回答
1

你可以像这样得到它:

var something = '"' + ['string1', 'string2'].join('", "') + '"';

这将导致:"string1", "string2"

或者你可以使用JSON.stringify(['string1', 'string2'])

这将导致:["string1","string2"]

于 2012-11-26T15:41:25.273 回答
0

另一种方法是编写一个简单的函数,从另一个中删除一个字符串数组,比如

var arr = ["str1","str2","str3"];

   function removeStrings(a,strs) {
     strs.forEach(function(e) {
       a.splice(a.indexOf(e),1);
     });
   }

removeStrings(arr,["str2","str1"]);
console.log(arr);//["str3"]
于 2012-11-26T15:44:45.387 回答
0

差异看起来更适合 http://underscorejs.org/#difference

var rem, orig, val;
rem = ['string1', 'string2'];
orig = ['string1', 'string2', 'string3'];

val = _.difference(orig, rem); // ['string3'];

http://jsbin.com/eyegoh/1/edit

或者使用 jQuery 稍长一点,使用 http://api.jquery.com/jQuery.grep/http://api.jquery.com/jQuery.inArray/

var rem, orig, val;
rem = ['string1', 'string2'];
orig = ['string1', 'string2', 'string3'];

val = $.grep(orig, function(el, ix) {
    return $.inArray(el, rem) == -1;
});

http://jsbin.com/uhihid/1/edit

于 2012-11-26T16:45:30.750 回答