将文本添加到 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 属性值的开头的主要内容,如果未能解决你的问题,请参考以下文章

将文本和行添加到文件的开头(Python)

如何将默认文本添加到 html 文本区域的开头?

如何将序数添加到文本文件中每一行的开头

python beautifulsoup将属性添加到没有值的标签

将带有值的产品属性添加到 Woocommerce 中的产品

如何让 emmet 将具有值的属性添加到 div 标签中?