gpt4 book ai didi

javascript - 将 immutability-helper 与数组、对象、映射一起使用

转载 作者:行者123 更新时间:2023-11-29 23:01:53 24 4
gpt4 key购买 nike

如何使用 immutability-helper 进行简单的创建、更新/修改、替换、删除?

  1. 如果我有一个简单值数组?

  2. 如果我有一个简单对象数组?

  3. 如果我的数组在另一个对象中?

  4. 如果我有对象的对象? (哈希,无序)

  5. 如果我有对象的 map ? (哈希,有序)

作为初学者,我找到了 official documentation有点困惑。

最佳答案

您可以在单独的问题中找到每个单独操作的答案,但不会全部列出。

<强>1。简单值数组

import update from 'immutability-helper';

const oldArray = [1, 2, 3];

// add an item
const newArray = update(oldArray, {$push: [6, 7]});
// => [1, 2, 3, 6, 7]

// modify an item
const itemIndex = 1; // modify `2` value at index `1`
const newValue = 8;
const newArray = update(oldArray, { [itemIndex]: {$set: newValue} });
// => [1, 8, 3]

// remove an item
const itemIndex = 2; // delete `3` value at index `2`
const newArray = update(oldArray, {$splice: [[itemIndex, 1]] });
// => [1, 2]

<强>2。简单对象数组

import update from 'immutability-helper';

const oldArray = [
{name: 'Stacey', age: 55},
{name: 'John', age: 77},
{name: 'Kim', age: 62},
];

// add an item
const newArray = update(oldArray, {$push: [
{name: 'Trevor', age: 45},
]});

// replace an item
const itemIndex = 1; // replace *John* at index `1`
const newValue = {name: 'Kevin', age: 25};
const newArray = update(oldArray, { [itemIndex]: {$set: newValue} });

// modify an item
const itemIndex = 1; // modify *John* at index `1`
const newArray = update(oldArray, {
[itemIndex]: {$merge, {
age: 85, // change John's age to 85
}}
});

// remove an item
const itemIndex = 0; // delete *Stacey* at index `0`
const newArray = update(oldArray, {$splice: [[itemIndex, 1]] } });

您可以使用内置的 findIndex()根据项目的属性查找项目的索引。

<强>3。数组在另一个对象中

import update from 'immutability-helper';

const oldData = {
city: {
people: [
{name: 'Stacey', age: 55},
{name: 'John', age: 77},
{name: 'Kim', age: 62},
]
}
};

// add an item
const newArray = update(oldArray, {
city: {
people: {$push: [
{name: 'Trevor', age: 45},
]}
}
});

// replace an item
const itemIndex = 1; // replace *John* at index `1`
const newValue = {name: 'Kevin', age: 25};
const newArray = update(oldArray, {
city: {
people: {
[itemIndex]: {$set: newValue} }}
}
}
);

// modify an item
const itemIndex = 1; // modify *John* at index `1`
const newArray = update(oldArray, {
city: {
people: {
[itemIndex]: {$merge, {
age: 85, // change John's age to 85
}}
}
}
});

// remove an item
const itemIndex = 0; // delete *Stacey* at index `0`
const newArray = update(oldArray, {
city: {
people: {$splice: [[itemIndex, 1]] }
}
});

<强>4。对象的对象(散列,无序)

import update from 'immutability-helper';

const oldData = {
'hash-stacey': {name: 'Stacey', age: 55},
'hash-john': {name: 'John', age: 77},
'hash-kim': {name: 'Kim', age: 62},
};

// add an item
const newData = update(oldData, {
['hash-trevor']: {$set: {name: 'Trevor', age: 45} }
});

// replace an item at a specific hash
const itemHash = 'hash-john';
const newValue = {name: 'Kevin', age: 25};
const newData = update(oldData, { [itemHash]: {$set: newValue} });

// modify an item
const itemHash = 'hash-john';
const newData = update(oldData, {
[itemHash]: {$merge: {
age: 85, // change John's age to 85
}}
});

// remove an item
const itemHash = 'hash-stacey';
const newData = update(oldData, {$unset: [itemHash] });

对象映射(散列,有序)

import update from 'immutability-helper';

const oldData = new Map([
['hash-stacey', {name: 'Stacey', age: 55}],
['hash-john', {name: 'John', age: 77}],
['hash-kim', {name: 'Kim', age: 62}],
]);

// add an item
const newData = update(oldData, {$add: [
['hash-trevor', {name: 'Trevor', age: 45}],
]});

// replace an item at a specific hash
const itemHash = 'hash-john';
const newValue = {name: 'Kevin', age: 25};
const newData = update(oldData, { [itemHash]: {$set: newValue} });

// modify an item
const itemHash = 'hash-john';
/* please edit with better single update $merge or $apply */
const newValue = update(oldData.get(itemHash), {$merge: {
age: 85, // change John's age to 85
}});
/* typescript needs to do `oldData as any` cast here */
const newData = update(oldData, { [itemHash]: {$set: newValue} });

// remove an item
const itemHash = 'hash-stacey';
const newData = update(oldData, {$remove: [itemHash] });

关于javascript - 将 immutability-helper 与数组、对象、映射一起使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55436821/

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