С подчеркиванием 1.8 это будет упрощено, так как у нас есть методы

иже взят из jQuery UI Autocomplete:

var projects = [
    {
        value: "jquery",
        label: "jQuery",
        desc: "the write less, do more, JavaScript library",
        icon: "jquery_32x32.png"
    },
    {
        value: "jquery-ui",
        label: "jQuery UI",
        desc: "the official user interface library for jQuery",
        icon: "jqueryui_32x32.png"
    },
    {
        value: "sizzlejs",
        label: "Sizzle JS",
        desc: "a pure-JavaScript CSS selector engine",
        icon: "sizzlejs_32x32.png"
    }
];

Например, я хочу изменитьdesc значение jquery-ui, Как я могу это сделать?

Кроме того, есть ли более быстрый способ получить данные? Я имею в виду дать объекту имя для извлечения его данных, как объект внутри массива? Так было бы что-то вродеjquery-ui.jquery-ui.desc = ....

 Aston14 янв. 2011 г., 11:28
Я обновил свое решение вашим последним вопросом. И вы можете использовать нотацию projects.jquery-ui.desc.
 Frédéric Hamidi14 янв. 2011 г., 11:26
Вам придется преобразовать массив в объект Javascript, чтобы использовать синтаксисprojects["jquery-ui"].desc, Это стоило бы усилий только, чтобы получить более хороший синтаксис?

Ответы на вопрос(16)

Найти индекс объекта с помощьюfindIndex метод.Сохраните индекс в переменной.Сделайте простое обновление, как это:yourArray[indexThatyouFind]

//Initailize array of objects.
let myArray = [
  {id: 0, name: "Jhon"},
  {id: 1, name: "Sara"},
  {id: 2, name: "Domnic"},
  {id: 3, name: "Bravo"}
],
    
//Find index of specific object using findIndex method.    
objIndex = myArray.findIndex((obj => obj.id == 1));

//Log object to Console.
console.log("Before update: ", myArray[objIndex])

//Update object's name property.
myArray[objIndex].name = "Laila"

//Log object to console again.
console.log("After update: ", myArray[objIndex])

 Craig25 окт. 2018 г., 09:16
@UmairAhmed Разве вышеупомянутый код не должен быть[...myArray.slice(0, objIndex), Object.assign({}, myArray[objIndex], ...myArray.slice(objIndex + 1))] ? Я думаю, что вам не хватает второго эллипса.
 Terkhos03 окт. 2017 г., 15:38
Любая причина для двойного() наfindIndex метод?
 Umair Ahmed24 мая 2018 г., 20:26
Да, но если вы не хотите мутировать.[...myArray.slice(0, objIndex), Object.assign({}, myArray[objIndex], myArray.slice(objIndex + 1))]
 Bimal Grg24 мая 2018 г., 09:36
это мутирует myArray.
 Umair Ahmed03 окт. 2017 г., 16:20
просто для удобства чтения: D

который вы меняете. тогда это довольно просто

projects[1].desc= "new string";

ES6 кстати, безмутирует исходные данные.

{
    value: "jquery",
    label: "jQuery",
    desc: "the write less, do more, JavaScript library",
    icon: "jquery_32x32.png"
},
{
    value: "jquery-ui",
    label: "jQuery UI",
    desc: "the official user interface library for jQuery",
    icon: "jqueryui_32x32.png"
}];

//find the index of object from array that you want to update
const objIndex = projects.findIndex(obj => obj.value === 'jquery-ui');

// make new object of updated object.   
const updatedObj = { ...projects[objIndex], desc: 'updated desc value'};

// make final new array of objects by combining updated object.
const updatedProjects = [
  ...projects.slice(0, objIndex),
  updatedObj,
  ...projects.slice(objIndex + 1),
];

console.log("original data=", projects);
console.log("updated data=", updatedProjects);
 Son Dang23 февр. 2019 г., 12:17
офигенно спасибо

Сначала найдите индекс:

function getIndex(array, key, value) {
        var found = false;
        var i = 0;
        while (i<array.length && !found) {
          if (array[i][key]==value) {
            found = true;
            return i;
          }
          i++;
        }
      }

Затем:

console.log(getIndex($scope.rides, "_id", id));

Затем делайте что хотите с этим индексом, например:

$ scope [returnindex] .someKey = "someValue";

Примечание: пожалуйста, не используйте for, так как for проверит все документы массива, используйте while со стопором, поэтому он остановится, как только будет найден, таким образом, более быстрый код.

Решение Вопроса

Вы должны искать в массиве, как:

function changeDesc( value, desc ) {
   for (var i in projects) {
     if (projects[i].value == value) {
        projects[i].desc = desc;
        break; //Stop this loop, we found it!
     }
   }
}

и использовать его как

var projects = [ ... ];
changeDesc ( 'jquery-ui', 'new description' );

ОБНОВИТЬ:

Чтобы получить это быстрее:

var projects = {
   jqueryUi : {
      value:  'lol1',
      desc:   'lol2'
   }
};

projects.jqueryUi.desc = 'new string';

(В соответствии с комментарием Фредерика вы не должны использовать дефис в ключе объекта, или вы должны использовать нотацию "jquery-ui" и projects ["jquery-ui"].)

 Aston14 янв. 2011 г., 11:35
Спасибо, я этого не знал.
 Aston14 янв. 2011 г., 11:24
да, создать объект вместо массива
 Frédéric Hamidi14 янв. 2011 г., 11:30
ваше обновление не будет работать из-за дефиса- в названии объекта. Вы должны написать"jquery-ui": {} а такжеprojects["jquery-ui"].desc соответственно.
 stackdave14 авг. 2018 г., 17:42
посмотрите на ответ абэ кур, это правильно, это и другие долго
 qinHaiXiang14 янв. 2011 г., 11:09
Есть ли гораздо более быстрый способ получить данные? Я имею в виду дать объекту имя для извлечения его данных. Точно так же, как объект внутри массива. Так, я могу использовать таким образом: jquery-ui.jquery-ui.desc = ....

_.chain(projects).map(item => {
      item.desc = item.value === "jquery-ui" ? "new desc" : item.desc;
      return item;
    })

массива с использованием Javascript.

function changeDesc(value, desc){
   projects.map((project) => project.value == value ? project.desc = desc : null)
}

changeDesc('jquery', 'new description')
 Fernando Caride26 мая 2018 г., 20:07
это возвратит [нуль, объект с обновленным значением, нуль]

Я думаю, что так лучше

const index = projects.findIndex(project => project.value='jquery-ui');
projects[index].desc = "updated desc";

Это возвращает новый массив с замененным описанием для объекта, который содержит значение, равное «jquery-ui».

const newProjects = projects.map(p =>
  p.value === 'jquery-ui'
    ? { ...p, desc: 'new description' }
    : p
);

Вы можете использовать$ .Each () перебрать массив и найти интересующий вас объект:

$.each(projects, function() {
    if (this.value == "jquery-ui") {
        this.desc = "Your new description";
    }
});

Попробуйте этот код. он использует функцию JQuery grep

array = $.grep(array, function (a) {
    if (a.Id == id) {
        a.Value= newValue;
    }
    return a;
});
 Mohammed Kamran Azam22 апр. 2017 г., 20:55
любая проблема с моим кодом, за который проголосовали?

// using higher-order functions to avoiding mutation
var projects = [
            {
                value: "jquery",
                label: "jQuery",
                desc: "the write less, do more, JavaScript library",
                icon: "jquery_32x32.            },
            {
                value: "jquery-ui",
                label: "jQuery UI",
                desc: "the official user interface library for jQuery",
                icon: "jqueryui_32x32.
            },
            {
                value: "sizzlejs",
                label: "Sizzle JS",
                desc: "a pure-JavaScript CSS selector engine",
                icon: "sizzlejs_32x32.
            }
        ];

// using higher-order functions to avoiding mutation
index = projects.findIndex(x => x.value === 'jquery-ui');
[... projects.slice(0,index), {'x': 'xxxx'}, ...projects.slice(index + 1, projects.length)];

поэтому я не мог использовать.findIndex.

Поэтому я вручную получил индекс предмета и заменил его. Вот код для того же.

 var students = [ 
{id:1,fName:"Ajay", lName:"Singh", age:20, sex:"M" },
{id:2,fName:"Raj", lName:"Sharma", age:21, sex:"M" },
{id:3,fName:"Amar", lName:"Verma", age:22, sex:"M" },
{id:4,fName:"Shiv", lName:"Singh", age:22, sex:"M" }
               ]

Приведенный ниже метод заменит студента наid:4 с большим количеством атрибутов в объекте

function updateStudent(id) {
 var indexOfRequiredStudent = -1;
    _.each(students,function(student,index) {                    
      if(student.id === id) {                        
           indexOfRequiredStudent = index; return;      
      }});
 students[indexOfRequiredStudent] = _.extend(students[indexOfRequiredStudent],{class:"First Year",branch:"CSE"});           

}

С подчеркиванием 1.8 это будет упрощено, так как у нас есть методы_.findIndexOf.

цикла, чтобы найти.

    if($scope.bechval>0 &&$scope.bechval!=undefined)
    {

                angular.forEach($scope.model.benhmarkghamlest, function (val, key) {
                $scope.model.benhmarkghamlest[key].bechval = $scope.bechval;

            });
    }
    else {
        alert("Please sepecify Bechmark value");
    }

  _.chain(projects)
   .find({value:"jquery-ui"})
   .merge({desc: "new desc"});

Docs:
https://lodash.com/docs#find
https://lodash.com/docs#merge

 Mika04 сент. 2017 г., 14:29
Что если jquery-ui не найден функцией find?
 AndrewBenjamin05 окт. 2017 г., 18:44
Свойство 'find' не существует для типа 'LoDashExplicitArrayWrapper'
 p0k8_01 февр. 2018 г., 05:48
Результат таких последовательностей должен быть развернут со значением _ #.lodash.com/docs/4.17.4#chain .value()

вы можете использовать .find так в вашем примере

   var projects = [
            {
                value: "jquery",
                label: "jQuery",
                desc: "the write less, do more, JavaScript library",
                icon: "jquery_32x32.png"
            },
            {
                value: "jquery-ui",
                label: "jQuery UI",
                desc: "the official user interface library for jQuery",
                icon: "jqueryui_32x32.png"
            },
            {
                value: "sizzlejs",
                label: "Sizzle JS",
                desc: "a pure-JavaScript CSS selector engine",
                icon: "sizzlejs_32x32.png"
            }
        ];

let project = projects.find((p) => {
    return p.value === 'jquery-ui';
});

project.desc = 'your value'
 stackdave14 авг. 2018 г., 17:41
это правильный ответ

Ваш ответ на вопрос