JavaScript如何选中指定type对象并push添加对应user数据
实现方案
首先先修正你示例里的基础语法错误:JavaScript 中键值对结构必须用对象 {} 包裹,数组 [] 只能存储按索引排列的单值,你写的 ['name':'mat','phone':'5555'] 属于非法语法,要改成 {name:'mat', phone:'5555'} 才能正常运行。
你的需求是给已存在的、匹配指定 type 的数组项新增用户数据,这种场景不需要用 push——push 是用来往数组末尾追加新元素的,直接遍历找到匹配项后给属性赋值即可;如果后续需要给同一个 type 绑定多个用户,再用 push 往用户数组里追加数据。
基础版:给指定type项绑定单个用户
完全匹配你示例的预期输出,代码如下:
// 原始type列表 const items = [{type: '1'}, {type: '2'}] /** * 给指定type的项加载用户数据 * @param {string} targetType 要匹配的type值 * @param {object} userData 用户数据对象 */ function setUserForType(targetType, userData) { // 找到第一个匹配type的数组项 const target = items.find(item => item.type === targetType) if (target) { // 直接给匹配项新增user属性赋值 target.user = userData } return items } // 测试调用 setUserForType('1', {name:'mat', phone:'5555'}) const finalResult = setUserForType('2', {name:'nicol', phone:'888'}) console.log(finalResult) /* 输出和你预期完全一致: [ {type: '1', user: {name:'mat', phone:'5555'}}, {type: '2', user: {name:'nicol', phone:'888'}} ] */
多用户版:同个type下追加多个用户(用到push)
如果后续需要给同一个type项绑定多个用户,就把user字段初始化为数组,追加数据时用push:
const items = [{type: '1'}, {type: '2'}] function pushUserForType(targetType, userData) { const target = items.find(item => item.type === targetType) if (target) { // 第一次绑定用户时如果user数组不存在,先初始化为空数组 if (!Array.isArray(target.user)) { target.user = [] } // 追加新用户到列表 target.user.push(userData) } return items } // 测试:给type=1的项先后加2个用户 pushUserForType('1', {name:'mat', phone:'5555'}) pushUserForType('1', {name:'tom', phone:'6666'})
补充说明
- 如果你的数组里存在多个相同type的项需要同时绑定用户,把代码里的
find换成filter,遍历所有匹配项逐一赋值即可 - 不要混淆对象和数组的语法:带键名的键值对结构统一用
{},只有顺序排列的列表值才用[]
内容的提问来源于stack exchange,提问作者avilac3
相关产品推荐
相关产品推荐

