将文本添加到 Object 属性值的开头
Posted
技术标签:
【中文标题】将文本添加到 Object 属性值的开头【英文标题】:Adding text to beginning of Object property value 【发布时间】:2022-01-15 11:05:30 【问题描述】:您好,我将字符串“a”添加到 name
值的开头。我还添加了一个条件,如果 name.length === 3
的值,则添加字符串 'a '
,但它只返回被更改的对象,并且只返回 name
属性。
var values1 = [
name: 'dog',
surname: 'good',
skills: 'programming',
,
name: 'cat',
surname: 'soft',
skills: 'engineer',
,
name: 'elephant',
surname: 'big',
skills: 'programming',
,
];
let array = [];
for (let i = 0; i < values1.length; i++)
if (values1[i]['name'].length == 3)
array.push( name: 'a ' + values1[i]['name'] );
for (let i = 0; i < array.length; i++)
console.log(array[i]);
这是我想要返回的结果。
[
name: 'a dog',
surname: 'good',
skills: 'programming',
,
name: 'a cat',
surname: 'soft',
skills: 'engineer',
,
name: 'elephant',
surname: 'big',
skills: 'programming',
,
];
【问题讨论】:
您的问题是什么?您的意思是“终端中的结果”是您想要达到的结果吗? 我不是最擅长解释,但如果你看一下 console.logged 结果,它基本上就是我想要的 您实际上已经很接近了,但请查看此行是否有意义:array.push( name: 'a ' + values1[i]['name'] );
【参考方案1】:
您已经很接近了,但您不想添加名称键 (push()
),而是要重新分配 name
字段的值。
var values1 = [
name: 'dog',
surname: 'good',
skills: 'programming',
,
name: 'cat',
surname: 'soft',
skills: 'engineer',
,
name: 'elephant',
surname: 'big',
skills: 'programming',
,
];
for (let i = 0; i < values1.length; i++)
if (values1[i]['name'].length == 3)
values1[i]['name'] = 'a ' + values1[i]['name'];
console.log(values1)
我修改了现有数组而不是添加一个新数组。我认为这并不危险,因为我们正在更新原语。
【讨论】:
这会在原地改变数组,看起来 OP 试图避免这种情况。 我确实提到了('修改了现有数组'),但在帖子中没有提到,所以我认为这只是因为他们没有看到如何就地改变它。如果这是一个要求,它是一个相当容易的改变。编辑:由于解释,我认为你的答案总体上更好,但我也想提供一个帮助 OP 看看他们哪里出错了。【参考方案2】:这是一个在回调中使用map()
和destructuring 的示例,name
属性。
var values1 = [
name: 'dog', surname: 'good', skills: 'programming' ,
name: 'cat', surname: 'soft', skills: 'engineer' ,
name: 'elephant', surname: 'big', skills: 'programming' ,
];
const result = values1.map(( name, ...rest ) =>
( name: (name.length === 3 ? `a $name` : name), ...rest ));
console.log(result);
但要使您的代码正常工作,您只需要确保推送整个对象,无论名称是否更改。这里使用Object.assign() 创建对象的副本,如果需要更新name
,然后将副本推送到数组。
var values1 = [
name: 'dog',
surname: 'good',
skills: 'programming',
,
name: 'cat',
surname: 'soft',
skills: 'engineer',
,
name: 'elephant',
surname: 'big',
skills: 'programming',
,
];
let array = [];
for (let i = 0; i < values1.length; i++)
const obj = Object.assign(, values1[i]);
if (obj['name'].length === 3)
obj.name = 'a ' + obj['name'];
array.push(obj);
for (let i = 0; i < array.length; i++)
console.log(array[i]);
【讨论】:
我试图避免 ...rest,因为此代码的使用范围更大。我只是出于简单的原因问了这个问题 第二个例子没有使用...rest
,但它使用spread克隆了对象。以上是关于将文本添加到 Object 属性值的开头的主要内容,如果未能解决你的问题,请参考以下文章