Как перебирать объекты jquery в массиве и отображать желаемый результат?

#jquery #sharepoint

#jquery #sharepoint

Вопрос:

Я новичок в пространстве jquery и надеюсь многому научиться с помощью Stackoverflow.

У меня есть элемент данных списка Sharepoint 2010, который имеет тип данных выбора, позволяющий пользователю устанавливать флажки более чем на одно значение. Я использую SPService для получения элементов списка. Ниже приведен код:

     $().SPServices({
                  webURL: 'http://abc.def.com/Products',
                  operation: 'GetListItems',
                  listName: listName,
                  async: false,
                  CAMLQuery: query,
                  CAMLViewFields: fields,
                  CAMLRowLimit: 11,

                  completefunc:
                  function (xData, Status) 
    {        $(xData.responseXML).find("[nodeName=z:row]").each(function () 

    {
           $("#ProdList").val("-1");//Pre-filled with selected val.
           var myProd= $(this).attr("ows_Prod"); //displays in this format ;#myProd1;#myProd2;#

          //Here 1. i want to store myProd as an array.
                 2. eliminate ;#
                 3. store final array elements as myProd1, myProd2
                 4. Display myProd1
                            myProd2
                                    in the dropdown list.
           //


           $("#ProdList").append('<option>'   myProd  '</option>');
      });   
    }

     });      

     });

    <body>
    <select class="Dropdowns" id="ProdList">
    <option value="-1">My ProdLists</option>
    </select>
    </body>
  Any pointers? Thanks.          
 

Ответ №1:

Немного сложно понять, в чем специфика вашего вопроса. Я предполагаю, что комментарии в вашем коде описывают вопрос. В следующий раз я бы посоветовал вам быть более конкретным с деталями вашего вопроса в тексте, а не в коде. Но, учитывая это, вот мое предположение о том, что вы пытаетесь сделать.

У вас есть строка, которая выглядит следующим образом:

 ";#myProd1;#myProd2;#"
 

И вы хотели бы получить myProd1 и myProd2 в массив, а затем из этого массива добавить в выпадающий список.

 // get product list
var myProd = $(this).attr("ows_Prod");
// clean up the ends
myProd = myProd.replace(/^;#|;#$/g, "");
// split into pieces
var myProdArray = myProd.split(";#");
// add each piece as an option to the drop-down
for (var i = 0; i < myProdArray.length; i  ) {
    $("#ProdList").append('<option>'   myProdArray[i]   '</option>')
}
 

Вы можете отсортировать массив в порядке словаря с помощью:

 myProdArray.sort();
 

Вы можете удалить дубликаты из отсортированного массива с помощью этого:

 var noDupArray = [];
noDupArray.push(myProdArray[0]);
for (var i = 1; i < myProdArray.length; i  ) {
    if (myProdArray[i] != myProdArray[i-1]) {
        noDupArray.push(myProdArray[i]);
    }
}
 

Итак, если вы хотите одновременно сортировать и удалять дубликаты, вы можете использовать этот код:

 var myProd = $(this).attr("ows_Prod");
myProd = myProd.replace(/^;#|;#$/g, "");
var myProdArray = myProd.split(";#");
// sort
myProdArray.sort();
// remove dups
var noDupArray = [];
noDupArray.push(myProdArray[0]);
for (var i = 1; i < myProdArray.length; i  ) {
    if (myProdArray[i] != myProdArray[i-1]) {
        noDupArray.push(myProdArray[i]);
    }
}
// add each piece as an option to the drop-down
for (i = 0; i < noDupArray.length; i  ) {
    $("#ProdList").append('<option>'   noDupArray[i]   '</option>')
}
 

Комментарии:

1. Большое спасибо jfriend00. Это сработало. В следующий раз я обязательно постараюсь быть более конкретным в описании вопроса. Еще раз спасибо за вашу помощь. 🙂

2. Как мне убедиться, что в моем выпадающем списке нет дубликатов для приведенного выше кода? Я также хочу, чтобы мой myProdArray был отсортирован (ASC). Какие-либо указатели? Спасибо.

3. Сортировка и дедупликация добавлены к моему ответу.

4. У меня есть два элемента списка, и они имеют одинаковые значения для myProd. Например. допустим, SharePoint2010 Я должен убедиться, что я помещаю SharePoint 2010 только один раз в выпадающий список. С помощью приведенного выше кода я не смог устранить дублирование. Какие-либо рекомендации, пожалуйста? Большое спасибо за оперативный ответ.

5. Кажется, это нормально работает здесь, в этом примере jsfiddle.net/jfriend00/yCauH если реализовано, как указано выше. В атрибуте есть несколько дубликатов, но в раскрывающемся списке нет дубликатов. Если вам нужна дополнительная помощь, вам нужно будет показать свою фактическую реализацию.