js对象取值

图片描述

如图
这个数组里面的对象 有可能有多个相同的text 字段 怎么选择 最靠前的一个 对象的text 或者 随机选择一个其中相同的某一个也行

只给其中一个加上 s:true 跟 pp:pp

阅读 2.9k
3 个回答

先把相同 text 的过滤出来就行了

const getSameTextArr = text => wordsArr.filter(v => v.text===text)
const getRandomNumber = num => Math.floor(Math.random()*num)
let sameTextArr = getSameTextArr('气')
let randomNumber = getRandomNumber(sameTextArr.length)
//  最靠前的一个: sameTextArr[0].id
//  随机选择一个: sameTextArr[randomNumber].id

再去wordsArr找到相应 id 去修改.

更新

我理解错题意了,我以为你是要对所有重复出现的字符都做 第一次出现的元素添加属性

如果是要给定字符并找出的话,@joy钰 的答案就可以了。

原答案

// 将数组映射成键值对,{'字符': 出现次数}
let map = wordsArr.reduce((map, word) => [map[word.text] = (map[word.text] || 0) + 1, map], {})
Object.keys(map).forEach(key => {
    // 根据当前键找到第一次出现的位置
    let index = wordsArr.findIndex(word => word.text === key);
    // 随机的话,就 filter 出所有 text 为 key 的元素,然后取个随机数去取对应位置即可。
    // 为该位置上的元素添加属性
    wordsArr[index]['s'] = 'true';
    wordsArr[index]['pp'] = 'pp'
})

Array.prototype.getByValue = function(val) {

    for(var i=0; i<this.length; i++) {
        if(this[i].text == val) {
            //push
        }
    }
};
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题