【问题标题】:How do I modify this and return this, employing a jQuery plugin?如何使用 jQuery 插件修改它并返回它?
【发布时间】:2014-01-24 17:21:03
【问题描述】:

我有一个 jQuery 插件,我在查看此线程时提供了部分帮助:jQuery.unique on an array of strings

这是我的代码:

// function
$(function() {
    $.fn.removeDuplicates = function() {
        var arrResult = [];
        for (var i = 0, n = this.length; i < n; i++) {
            var item = this[i];
            var index = item.SerialNo + " - " + item.UPC + " - " + item.Name + " - " + item.Version + " - " + item.Description;
            arrResult[ index ] = item;
        }
        var i = 0;
        var nonDuplicatedArray = [];
        for (var item in arrResult) {
            nonDuplicatedArray[i++] = arrResult[item];
        }
        return (this = nonDuplicatedArray);
    };
});

var arrObj = [
    { "SerialNo:"1234", "UPC":"ABCXYZ", "Name":"Test", "Version":"1", "Description":"test"}, 
    { "SerialNo:"1234", "UPC":"ABCXYZ", "Name":"Test", "Version":"1", "Description":"test"}, 
    { "SerialNo:"12345", "UPC":"ABCXYZ123", "Name":"Test2", "Version":"2", "Description":"test2"} 
];

$(arrObj).removeDuplicates();

我想修改this并返回。该插件不必被链接,但我想保持函数调用相同。我意识到我可以通过返回nonDuplicatedArray 来修改函数并将其设置为函数调用中的变量,ergo:

var newVar = $(arrObj).removeDuplicates();

但我希望有一种方法可以直接修改函数内部的this 并返回this,同时保留原始函数调用。简单来说,如何将nonDuplicatedArray 设置为this

谢谢。

【问题讨论】:

  • 它看起来不像是你会使用 jQuery 插件、传递数组作为选择器等的那种事情?
  • 我很想接受教育。在这种情况下,我为什么不使用 jQuery 插件?我是真诚的。也许你是对的。
  • 你正在改变一个数组,你可以使用一个函数。 jQuery 通常用于操作 DOM,并将数组传递给一个 jQuery 插件,该插件只更改数组并返回它,这似乎是对 jQuery 的不好使用,因为只使用常规函数会更容易。
  • 是的,我觉得你说的很有道理。你说的我最好做一些类似创建数组原型函数的事情,而不是使用 JS 框架。
  • 是的,这就是我要说的,同时对像 Array 这样的原生对象进行原型设计也不总是一个好主意,但在这种情况下,它似乎比使用 jQuery 更好.

标签: jquery arrays object jquery-plugins this


【解决方案1】:

最后,只需要返回数组,不需要将this设置为nonDuplicatedArray,一旦函数完成了它应该做的,你不再需要this关键字,你只需要返回数组?

return nonDuplicatedArray;

FIDDLE

【讨论】:

  • 啊。那么,原始变量arrObj 将被修改为返回nonDuplicatedArray?我不必将其设置为newVar?实际上,根据小提琴,返回设置为一个新变量。我想做的不是必须那样做。
  • @user717236 - 如果你要链接它,你必须包装它,就像在return $(nonDuplicatedArray); 中一样,但是你有一个包含数组的 jQuery 对象。我将数组返回到某个地方以控制台记录它,但您不必这样做。这是一个例子 -> jsfiddle.net/jZ46P/1
  • 或者没有链接,只返回数组 -> jsfiddle.net/jZ46P/2
  • 无论你返回什么现在都是价值。
  • 哦,好的。我现在明白了。这很有意义。感谢您的帮助和教育!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-09-04
  • 1970-01-01
  • 1970-01-01
  • 2022-05-16
  • 1970-01-01
相关资源
最近更新 更多